0tps,拓扑排序+dp求调
查看原帖
0tps,拓扑排序+dp求调
979584
zafa2023楼主2025/7/22 16:42
#include<bits/stdc++.h>
using namespace std;
vector<int>b[100001];
vector<int>f[100001];
int d[100001],su[100001],ans,vis[100001],m,dp[100001];
queue<int>q;
int n;
void tpsort(){
	int e;
	for(int i=1;i<=n;i++){
		if(d[i]==0){
			e=i;
			q.push(e);
			vis[i]=1;
			dp[i]=1; 
		}
	}
	while(!q.empty()){
		int k=q.front();
		su[++ans]=k;
		q.pop();
		for(int i=0;i<b[k].size();i++){
			d[b[k][i]]--;
			dp[b[k][i]]=max(dp[b[k][i]],dp[k]+1);
			if(d[b[k][i]]==0&&vis[b[k][i]]!=1){
				q.push(b[k][i]);
				vis[b[k][i]]=1;
			}
		}
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int s,e;
		cin>>s>>e;
		b[s].push_back(e);
	}
	tpsort();
	for(int i=1;i<=n;i++)cout<<dp[i]<<" ";
	return 0;
}
2025/7/22 16:42
加载中...