MLE求调,玄关
  • 板块P1347 排序
  • 楼主Emplace
  • 当前回复10
  • 已保存回复12
  • 发布时间2024/10/18 14:48
  • 上次更新2024/11/10 15:51:02
查看原帖
MLE求调,玄关
745865
Emplace楼主2024/10/18 14:48
#include<bits/stdc++.h>
using namespace std;
int d[27],td[27],jntm,wssb,vis[27],a[27];
vector<int> g[27];
int s[27];
int n,m;
bool check(){
	for(int j=1;j<=n;j++){
		if(s[j]==0){
			return 0;
		}
	}
	return 1;
}
void dfs(int x,int s){
	if(x==jntm&&s!=0){
		cout<<"Inconsistency found after "<<wssb<<" relations.";
		exit(0);
	}
	s+=1;
	for(int c=0;c<g[x].size();c++){
		dfs(g[x][c],s);
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		char u,v,z;
		cin>>u>>z>>v;
		for(int j=1;j<=n;j++){
			d[i]=td[i];
		}
		s[u-65+1]++;
		s[v-65+1]++;
		int tu=int(u-'A'+1),tv=int(v-'A'+1);
		g[tu].push_back(tv);
		for(int j=1;j<=26;j++){
			if(s[j]){
				jntm=j;
				wssb=i;
				dfs(j,0);
			}
		}
		d[tv]++;
		td[tv]++;
		if(check()){
			memset(a,0,sizeof(a));
			queue<int> q;
			int k,tcnt=0;
			for(int j=1;j<=n;j++){
				if(d[j]==0){
					tcnt++;
					k++;
					a[k]=j;
					q.push(j);
				}
			}
			if(tcnt>1){
				continue;
			}
			int f=0;
			while(q.size()){
				int ans=0;
				int x=q.front();
				q.pop();
				for(int j=0;j<g[x].size();j++){
					d[g[x][j]]--;
					if(d[g[x][j]]==0){
						ans++;
						k++;
						a[k]=g[x][j];
						q.push(g[x][j]);
					}
				}
				if(ans>1){
					f=1;
					break;
				}
			}
			if(f==1){
				continue;
			}
			else if(k==n&&f==0){
				cout<<"Sorted sequence determined after "<<i<<" relations: ";
				for(int i=1;i<=n;i++){
					cout<<char(a[i]+'A'-1);
				}
				cout<<".";
				return 0;
			}
			return 0;
		}
	}
	cout<<"Sorted sequence cannot be determined.";
}
2024/10/18 14:48
加载中...