30分求助!
查看原帖
30分求助!
738083
sjrdlgzh楼主2024/8/30 12:25

只过了2、4、7拓扑

#include <bits/stdc++.h>
using namespace std;


int n, m;
int s,mark[1001];
vector<vector<int>> road(1001);int is[1001],isadd[1001][1001],du[10001],best[10001];
void dfs(int p,int k)//
{
	
	if(k<=best[p])
	{
		return;
	}
	best[p]=k;
	//cout<<p<<" "<<k<<endl;
	for(int i=0;i<road[p].size();i++)
	{
		//cout<<"road:"<<road[p][i]<<endl;
		dfs(road[p][i],k+1);
	}
	
}
int main(){
	cin >> n >> m;
	for(int i=1;i<=m;i++)
	{
		int cnt=0;
		memset(mark,sizeof(mark),0);
		memset(is,sizeof(is),0);
		cin>>s;
		for(int j=1;j<=s;j++)
		{
			cin>>mark[j];
			is[mark[j]]=1;
		}
		for(int z=mark[i];z<=mark[s];z++)// 起点-停靠终点所有站台
		{
			if(!is[z])//z不停
			{
				for(int j=1;j<=s;j++)//   所有停靠建图
				{
					if(!isadd[mark[j]][z])
					{
						road[mark[j]].push_back(z);
						du[z]=1;
						isadd[mark[j]][z]=1;
					}
				}
			}
			
		}	
	}
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=road[i].size();i++){
//			//TODO
//			cout<<road[i][j]<<" ";
//		}
//		cout<<endl;
//	}
	int ans=0;
	for(int i = 1; i <= n; i ++) 
	{
		if(du[i]==0)
		{
			dfs(i,1);
			
		}
	}		
	for(int i=1;i<=n;i++)
	{
		if(best[i]>ans)
		{
			ans=best[i];
		}
	}
	
	cout<<ans;
	return 0;
}
2024/8/30 12:25
加载中...