拓扑排序求助,按照题解思路做的但自己用了邻接表
查看原帖
拓扑排序求助,按照题解思路做的但自己用了邻接表
1013142
Chizuru_Ichinose楼主2024/3/7 20:02
#include<bits/stdc++.h>
#define PII pair<int,int>
using namespace std;
const int kMax=1005;
int n,m;
int s[kMax],ind[kMax];
bool stop[kMax],vis[kMax][kMax];
vector<int> edge[kMax*kMax];
queue<PII> q;
int ans=0;
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		memset(stop,0,sizeof(stop));
		int temp; cin>>temp;
		for(int t=1;t<=temp;t++)
		{
			cin>>s[t];
			stop[s[t]]=1;
		}
		for(int cnt=s[1];cnt<=s[temp];cnt++)
		{
			if(!stop[cnt])
			{
				for(int u=1;u<=temp;u++)
				{
					if(!vis[cnt][s[u]])
					{
						ind[s[u]]++;
						vis[cnt][s[u]]=1;
						edge[cnt].push_back(s[u]);
					}
				}
			}
		}
		for(int p=1;p<=n;p++) if(!ind[p]) q.emplace(p,1);
		while(!q.empty()){	
			PII in=q.front(); q.pop();
			int i_first=in.first;
			int i_second=in.second;
			for(int d=0;d<edge[i_first].size();d++)
			{
				int to=edge[i_first][d];
				ind[to]--;
				if(!ind[to]) q.emplace(to,i_second+1);
				ans=max(ans,i_second+1);
			}
		}
		
	}
	
	cout<<ans;
	
	return 0;
}
2024/3/7 20:02
加载中...