求助
  • 板块P1347 排序
  • 楼主iakioi114514
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/29 17:48
  • 上次更新2024/3/29 18:14:24
查看原帖
求助
774677
iakioi114514楼主2024/3/29 17:48
#include<bits/stdc++.h>
using namespace std;
int rudu[1000001],n,now,m,d[1000001],num;
char a,b,c;
struct Edge{
	int to,from;
}edge[1000001];
queue<int> q;
int head[1000001],edge_num,ans=0,answer[1000001];
void add_edge(int u,int v){
	edge[++edge_num].to=v;
	edge[edge_num].from=head[u];
	head[u]=edge_num;
}
char print(){
	for(int i=1;i<=ans;i++){
		cout<<answer[i]+'A'-1;
	}
	cout<<endl;
	return '.';
}
int tp(){
	int out=1,t,u;
	for(int i=1;i<=n;i++){
		if(rudu[i]==1){
			q.push(i);
			t++;
		}
	}
	if(t>1) out=0;
	while(!q.empty()){
		u=q.front();
		q.pop();
		t=0;
		answer[++ans]=u;
		for(int i=head[u];i>0;i=edge[i].from){
			rudu[edge[i].to]--;
			if(rudu[edge[i].to]==1){
				t++;
				q.push(edge[i].to);
			}
		}
		if(t>1) out=0;
	}
	for(int i=1;i<=n;i++){
		if(rudu[i]>1){
			out=-1;
			break;
		}
	}
	return out;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>a>>b>>c;
		add_edge(a-'A'+1,c-'A'+1);
		d[c-'A'+1]++;
		if(now==0){
			for(int j=1;j<=n;j++){
				rudu[j]=d[j];
			}
			now=tp();
			num=i;
		}
	}
	if(now==0) cout<<"Sorted sequence cannot be determined."<<endl;
	else if(now==1) cout<<"Sorted sequence determined after "<<num<<" relations: "<<print()<<"."<<endl;
	else cout<<"Inconsistency found after "<<num<<" relations."<<endl;
	return 0;
}

哪里出错了????????????????????????????????????????

2024/3/29 17:48
加载中...