玄关求助aaa
  • 板块P1347 排序
  • 楼主drinktowind
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/1 13:00
  • 上次更新2024/4/1 16:46:11
查看原帖
玄关求助aaa
719619
drinktowind楼主2024/4/1 13:00
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node{
	int to,w,next;
}a[50010];
int head[1510],b[60],c[60],dis[60],x,cnt,n,m;
char ca,cb;
bool f[60][60];
void dfs(int x)
{
	if(c[x]) 
		dfs(c[x]);
	cout<<char('A'+x-1);
}
void add(int u,int v)
{
	a[++cnt].to=v;
	a[cnt].next=head[u];
	head[u]=cnt;
}
void check(int k)
{
	head[5]=0;
	memset(dis,0,sizeof(dis));
	queue<int> q;
	dis[0]=1;
	q.push(0);
	while(!q.empty())
	{
		x=q.front();
		//cout<<x<<endl;
		q.pop();
		for(int i=head[x];i;i=a[i].next)
		{
			if(dis[a[i].to]<dis[x]+1)
			{
				c[n+1]=a[i].to;
				c[a[i].to]=x;
				dis[a[i].to]=dis[x]+1;
				q.push(a[i].to);
			}
			if(dis[a[i].to]>n+2)
			{
				printf("Inconsistency found after %lld relations.",k);
				exit(0);
			}
		}
		//cout<<endl;
	}
	if(k==m&&dis[n+1]!=n+2)
		cout<<"Sorted sequence cannot be determined.";
	if(dis[n+1]==n+2)
	{
		printf("Sorted sequence determined after %lld relations: ",k);
		dfs(c[n+1]);
		cout<<".";
		exit(0);
	}	
}
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		add(0,i);
		add(i,n+1);
	}
	for(int i=65;i<=90;i++)
		b[i]=i-64;
	for(int i=1;i<=m;i++)
	{
		cin>>ca;
		if(ca=='\r')
			cin>>ca;
		cin>>cb>>cb;
		if(ca==cb)
		{
			printf("Inconsistency found after %lld relations.",k);
			return 0;
		}
		if(!f[b[(int)ca]][b[(int)cb]])
		{
			f[b[(int)ca]][b[(int)cb]]=1;
			add(b[(int)ca],b[(int)cb]);
		}
		check(i);
	}
	return 0;
}

可能有弱智问题,轻点喷

2024/4/1 13:00
加载中...