C++20pts求助!
  • 板块P1347 排序
  • 楼主PengDave
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/2/28 21:29
  • 上次更新2024/2/29 09:34:24
查看原帖
C++20pts求助!
1048193
PengDave楼主2024/2/28 21:29
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<queue>
#include<bitset>
#include<climits>
#include<vector>
using namespace std;
vector<int> g[30];
bitset<30> vis;
int in[30];
int n,m;
void topo(int x){
	int iin[30]={};
	for(int i=1;i<=n;i++){
		iin[i]=in[i];
	}
	queue<int> q;
	for(int i=1;i<=n;i++){
		if(iin[i]==0){
			q.push(i);
		}
	}
	if(q.size()>1){
		return;
	}
	if(q.size()==0){
		cout<<"Inconsistency found after "<<x<<" relations."<<endl;
		exit(0);
	}
	string ans="";
	int kkk=0;
	while(!q.empty()){
		int cnt=0;
		kkk++;
		int u=q.front();
		q.pop();
		ans+=char(u+65);
		for(int i:g[u]){
			iin[i]--;
			if(iin[i]==0){
				cnt++;
				q.push(i);
			}
		}
		if(cnt>1){
			return;
		}
	}
	if(kkk!=n){
		cout<<"Inconsistency found after "<<x<<" relations."<<endl;
		exit(0);
	}else{
		cout<<"Sorted sequence determined after "<<x<<" relations: "<<ans<<"."<<endl;
		exit(0);
	}
	return;
}
int main(){
	cin.tie(nullptr);
	ios::sync_with_stdio(false);
	cin>>n>>m;
	int p=0;
	for(int i=1;i<=m;i++){
		char a,k,c;
		cin>>a>>k>>c;
		g[a-65].push_back(c-65);
		if(!vis[a-65]){
			p++;
		}
		if(!vis[c-65]){
			p++;
		}
		vis[a-65]=1;
		vis[c-65]=1;
		in[a-65]++;
		in[c-65]++;
		if(p==n){
			topo(i);
		}
	}
	cout<<"Sorted sequence cannot be determined."<<endl;
	return 0;
}
2024/2/28 21:29
加载中...