萌新刚学OI,求助连样例都没过的拓扑排序
查看原帖
萌新刚学OI,求助连样例都没过的拓扑排序
298549
SIXIANG32楼主2020/8/3 21:55

RT

#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
vector<int>gra[100100];
int d[100100];
int a[100100];
int level[100100];
bool vis[100100];
bool vv[1010][1010];
int n,m,k,ans=0;
void link(int x,int y)
{
	gra[x].push_back(y);
	d[y]++;
}
int dfs()
{
	int tot=0;
	queue<int>que;
	for(int p=1;p<=n;p++)
		if(!d[p])
			que.push(p),level[p]=1;
	while(!que.empty())
	{
		int fr=que.front();
		que.pop();
		tot++;
		for(int p=0;p<gra[fr].size();p++)
		{
			d[gra[fr][p]]--;
			if(!d[gra[fr][p]])
			{
				level[gra[fr][p]]=level[fr]+1;
				ans=max(ans,level[gra[fr][p]]);
				que.push(gra[fr][p]);
			}
		}
	}
	return ans;
}
signed main()
{
	int s;
	cin>>n>>m;
	for(int p=1;p<=m;p++)
	{
		cin>>s;
		for(int i=1;i<=s;i++)
			cin>>a[i];
		for(int i=1;i<=si++)
			for(int j=i+1;j<=s;j++)
				if(!vv[a[i]][a[j]])
				{
					vv[a[i]][a[j]]=1;
					link(a[i],a[j]);	
				}
	}
	cout<<dfs()<<endl;
	for(int i=1;i<=n;i++)
		cout<<level[i]<<" ";
	return 0;
}

求助啊,调不动了/kk

2020/8/3 21:55
加载中...