WA20求调
  • 板块P1347 排序
  • 楼主zheng0201
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/16 19:48
  • 上次更新2024/6/16 22:17:52
查看原帖
WA20求调
1013999
zheng0201楼主2024/6/16 19:48
#include<bits/stdc++.h>
using namespace std;

int n,m,x,y,l[605],d[605],f[605],num,tong[605];
char a,b,c;
vector<int> v[605];
vector<int> p;
queue <int> q;

int toposort(){
	memset(d,0,sizeof(d));
	memset(f,0,sizeof(f));
	p.clear();
	int cnt=0;
	int level=0;
	for(int i=1;i<=n;i++){
		for(int t:v[i]){
			d[t]++;
		}
	}
	for(int i=1;i<=n;i++){
		if(tong[i]!=0 && d[i]==0){
			q.push(i);
			f[i]=1;
		}
	}
	while(!q.empty()){
		int x=q.front();
		q.pop();
		p.push_back(x);
		cnt++;
		for(int i:v[x]){
			f[i]=max(f[i],f[x]+1);
			level=max(level,f[i]);
			d[i]--;
			if(d[i]==0){
				q.push(i);
			}
		}
	}
	if(cnt!=num){
		return 2;	
	}
	if(level==n){
		return 1;
	}
	return 0;
}

int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>a>>b>>c;
		x=a-'A'+1;
		y=c-'A'+1;
		tong[x]++;
		if(tong[x]==1){
			num++;
		}
		tong[y]++;
		if(tong[y]==1){
			num++;
		}
		
		d[y]++;
		v[x].push_back(y);
		int flag=toposort();
		if(flag==1){
			cout<<"Sorted sequence determined after "<<num<<" relations: ";
				for(int t:p){
					char k=t-1+'A';
					cout<<k;
				}
				cout<<".";
			return 0;
		}
		else if(flag==2){
			cout<<"Inconsistency found after "<<num<<" relations.";
			return 0;
		}
	}
	cout<<"Sorted sequence cannot be determined.";
	return 0;
}

2024/6/16 19:48
加载中...