A了#1#3#8#9,30分,大佬们,求调
  • 板块P1347 排序
  • 楼主hongpeijia
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/7/5 08:59
  • 上次更新2023/11/3 11:34:02
查看原帖
A了#1#3#8#9,30分,大佬们,求调
831785
hongpeijia楼主2023/7/5 08:59
#include<bits/stdc++.h>
using namespace std;
vector<int> g[1000002];
int n,m;
int rd[1000002];
int du[1000002];
int ans[1000002];
void topo(int id)
{
	int cnt=0,num=0;
	queue<int> q;
	for(int i=1;i<=n;i++) rd[i]=du[i];
	for(int i=1;i<=n;i++)
	{
		if(rd[i]==0)
		{
			q.push(i);
			cnt++;	
		} 	
	}
	if(cnt>1) return;
	while(!q.empty())
	{
		int x=q.front();
		q.pop();
		cnt=0;
		++num;
		ans[num]=x;
		for(auto y:g[x])
		{
			--rd[y];
			if(rd[y]==0)
			{
				++cnt;
				q.push(y);
			}
		}
		if(cnt>1) return;
	}
	if(num<n) 
	{
		printf("Inconsistency found after %d relations.",id);
		exit(0);
	}
	printf("Sorted sequence determined after %d relations: ",id);
	for(int i=1;i<=num;i++)
	{
		cout<<char(ans[i]+'A'-1);
	}
	cout<<".\n";
	exit(0);
	
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		string s;
		cin>>s;
		int x=s[0]-'A'+1;
		int y=s[2]-'A'+1; 
		g[x].push_back(y);
		du[y]++;
		ans[i]={0};
		memcpy(rd,du,sizeof(du));
		topo(i);
	}
	printf("Sorted sequence cannot be determined.");
	return 0;
}
2023/7/5 08:59
加载中...