听灌佬多(P1347)
  • 板块灌水区
  • 楼主Xianzi_
  • 当前回复13
  • 已保存回复13
  • 发布时间2024/9/14 20:24
  • 上次更新2024/9/14 22:20:42
查看原帖
听灌佬多(P1347)
591561
Xianzi_楼主2024/9/14 20:24

P1347

rt,求修

#include "bits/stdc++.h"
using namespace std;
const int Xe = 30;
int n, m, pa[Xe];
vector <int> ve[Xe];
bool vis[Xe][Xe];
queue <int> q;
void dfs(int x){
	if (pa[x]) dfs(pa[x]);
	cout << char(x + 'A' - 1);
}
int bfs(int k){
	int s[Xe];
	memset(s, 0, sizeof(s));
	s[0] = 1;
	q.push(0);
	while(!q.empty()){
		int u = q.front();
		q.pop();
		for (int i = 0; i < ve[u].size(); i++){
			int v = ve[u][i];
			if (s[v] < s[u] + 1){
				pa[n + 1] = v;
				pa[v] = u;
				s[v] = s[u] + 1;
				q.push(v);
			}
			if (s[v] > n + 2){
				cout << "Inconsistency found after " << k << " relations.";
				return 0;
			}	
		}
	}
	if (k == m && s[n + 1] != n + 2) cout << "Sorted sequence cannot be determined.";
	if (s[n + 1] == n + 2){
		cout << "Sorted sequence determined after " << k << " relations: ";
		dfs(pa[n + 1]);
		cout << ".";
		return 0;
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= n; i++){
		ve[0].push_back(i);
		ve[i].push_back(n + 1);
	}
	for (int i = 1; i <= m; i++){
		char a, b, c;
		cin >> a >> b >> c;
		if (!vis[a - 'A' + 1][c - 'A' + 1]){
			ve[a - 'A' + 1].push_back(c - 'A' + 1);
			vis[a - 'A' + 1][c - 'A' + 1] = 1;
		}
		bfs(i);
	}
	
	return 0;
}
2024/9/14 20:24
加载中...