小数据正确代码 WA求助 使用vector存图
查看原帖
小数据正确代码 WA求助 使用vector存图
722084
Fimlty楼主2022/10/13 21:53

代码如下

#include<iostream>
#include<vector>
#include<map>
#include<queue>
using namespace std;
int T,n,m;
vector<int>G[200005];
queue<int>qu;
int du[200005]={0},f[200005];
bool toposort()
{
	int u,cnt = 0;
	for(int i = 1;i <= n; i++)
	{
		if(du[i] == 0)
		qu.push(i);
	}
	while(!qu.empty())
	{
		u = qu.front();
		qu.pop();
		f[u] = ++cnt;
		for(int i = 0;i < G[u].size(); i++)
		{
			du[G[u][i]]--;
			if(!du[G[u][i]])qu.push(G[u][i]);
		}
	}
	if(cnt != n)return false;
	return true;
}
int main()
{	
	scanf("%d", &T);
	int a, b, c;
	while (T--)
	{
		for(int i=0;i<200005;i++)
		{
			G[i].clear();
		}
		scanf("%d%d", &n, &m);
		vector<pair<int, int> >und;
		for (int i = 1; i <= m; i++)
		{
			scanf("%d%d%d", &a, &b, &c);
			if (a == 1)
			{
				G[b].push_back(c);
				du[c]++;
			}
			else
			{
				und.push_back(make_pair(b, c));
			}
		}
		if(toposort())
		{
			puts("YES");
			for(int i=1;i<=n;i++)
			{
				for(int j=0;j<G[i].size();j++)
				{
					printf("%d %d\n",i,G[i][j]);
				}
			}
			for(int i=0;i<und.size();i++)
			{
				int x=und[i].first,y=und[i].second;
				if(f[x]<f[y])printf("%d %d\n",x,y);
				else printf("%d %d\n",y,x);
			}
		}
		else puts("NO");
	}
}

样例数据输出虽然不一样但是也是有向无环图,大佬帮我看看哪里有问题。

2022/10/13 21:53
加载中...