应该很容易,但是MLE两个点求调
查看原帖
应该很容易,但是MLE两个点求调
756529
progress_from0楼主2023/3/21 16:49
#include<bits/stdc++.h>
#define ll long long

using namespace std;
const int maxn=100;
int n,m,path[maxn];
vector<int> G[maxn];
bool g[maxn][maxn];

void dfs(int v){
	if(path[v])dfs(path[v]);
	cout<<char('A'+v-1);
	return;
}

inline void bfs(int k){
	queue<int> q;
	int dis[maxn]={0};
	dis[0]=1;
	q.push(0);
	while(!q.empty()){
		int uu=q.front();q.pop();
		for(int i=0;i<G[uu].size();i++){
			int vv=G[uu][i];
			if(dis[vv]<dis[uu]+1){
				dis[vv]=dis[uu]+1;
				path[vv]=uu;
				path[n+1]=vv;
				q.push(vv);
			}
			if(dis[vv]>n+2){
				printf("Inconsistency found after %d relations.",k);
				exit(0);	
			}
		}
	}
	if(k==m&&dis[n+1]!=n+2){
		printf("Sorted sequence cannot be determined.");
	}
	if(dis[n+1]==n+2){
		printf("Sorted sequence determined after %d relations: ",k);
		dfs(path[n+1]);
		printf(".");
		exit(0);	
	}
}

int main(){
	//freopen("2.txt","r",stdin);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		G[0].push_back(i);
		G[i].push_back(n+1);
	}
	for(int i=1;i<=m;i++){
		char a,b,c;
		cin>>a>>b>>c;
		if(!g[a-'A'+1][c-'A'+1]){
			G[a-'A'+1].push_back(c-'A'+1);
			g[a-'A'+1][c-'A'+1]=1;
		}
		bfs(i);
	}
	
	return 0;
}
2023/3/21 16:49
加载中...