拓扑排序10分求助
查看原帖
拓扑排序10分求助
490978
小超手123楼主2022/5/20 19:31
#include<bits/stdc++.h>
using namespace std;
int k,n,m,ans;
int in[1010]; //指每个点的入度
int f[1010];
vector<int>p[1010];
queue<int>Q;
int main(){
	cin>>k>>n>>m;
	for(int i=1;i<=k;i++){
		int x;
		cin>>x;
		f[x]++;
	}
	for(int i=1;i<=m;i++){
		int u,v;
		cin>>u>>v; 
		p[u].push_back(v);
		in[v]++; 
	}
	for(int i=1;i<=n;i++){
		if(in[i]==0)
		    Q.push(i);
	}
	while(!Q.empty()){
		int x=Q.front();
		Q.pop();
		for(int i=0;i<p[x].size();i++){
			int y=p[x][i];
			in[y]--;
			f[y]+=f[x];
			if(in[y]==0)Q.push(y);
		} 
	}
	for(int i=1;i<=n;i++){
		if(f[i]==k)ans++;
	}
	cout<<ans;
	return 0;
}
2022/5/20 19:31
加载中...