蒟蒻不知道哪里错了,请大佬指教
查看原帖
蒟蒻不知道哪里错了,请大佬指教
363036
chlchl楼主2021/9/28 19:57
#include<bits/stdc++.h>
using namespace std;

const int N = 100 + 10;
vector<int> g[N];
int n, m, u, v, ans, q[N], yes[N][N], f[N], d[N];

int find(int x){
	if(f[x] == x)	return x;
	return f[x] = find(f[x]);
}

int toposort(){
	int l = 0, r = 0;
	for(int i=1;i<=n;i++)	if(!d[i])	q[++r] = i;
	while(l < r){
		int u = q[++l];
		if(l == r){
			int i = 1;
			for(i=1;i<=r;i++)	if(!yes[u][q[i]])	break;//但凡这个图不连通,这只奶牛顺序就不确定 
			if(i == r + 1)	ans++;//这只奶牛顺序确定啦!
		}
		for(int i=0;i<g[u].size();i++){
			int v = g[u][i];
			d[v]--;
			if(!d[v])	q[++r] = v;
			for(int j=1;j<=r;j++)	if(yes[u][q[j]])	yes[i][q[j]] = 1;
		}
	}
	return ans;
}

int main(){
	cin >> n >> m;
	for(int i=1;i<=m;i++){
		cin >> u >> v;
		g[u].push_back(v);
		d[v]++;
		f[find(v)] = find(u);
	}
	int cnt = 0;
	for(int i=1;i<=n;i++){
		if(f[i] == i)	cnt++;
		yes[i][i] = 1;
		if(cnt > 1){
			cout << 0 << endl;
			return 0;
		}
	}
	cout << toposort() << endl;
	return 0;
}

这个代码有什么毛病吗 QwQ?

2021/9/28 19:57
加载中...