Code厌氧,求解答
  • 板块P1347 排序
  • 楼主Genshineer
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/2 15:44
  • 上次更新2023/12/2 16:53:37
查看原帖
Code厌氧,求解答
191248
Genshineer楼主2023/12/2 15:44

Code:

#include <bits/stdc++.h>
using namespace std;

int n, m, d[30];
bool b[30];
vector<int> G[30];

inline int topsort(int x) {
//	for (int i = 1; i <= n; i++)
//		if (!b[i])
//			return -1;
	queue<int> q;
	vector<int> ans;
	int deg[30];
	memcpy(deg, d, sizeof deg);
	for (int i = 1; i <= n; i++)
		if (!deg[i])
			q.push(i);
	if (q.size() == 0) {
		cout << "Inconsistency found after " << x << " relations.";
		return 0;
	}
	int flag;
	while (q.size()) {
		if (q.size() > 1)
			flag = -1;
		int u = q.front();
		ans.push_back(u);
		q.pop();
		
		for (auto v : G[u]) {
			deg[v]--;
			if (!deg[v])
				q.push(v);
		}
	}
//	cout << ans.size();
	if (ans.size() != n) {
		cout << "Inconsistency found after " << x << " relations.";
		return 0;
	}
	if (flag == -1)
		return -1;
	cout << "Sorted sequence determined after " << x << " relations: ";
	for (int i : ans)
		cout << char(i + 'A' - 1);
	cout << ".";
	return 1;
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		string s;
		cin >> s;
		int u = s[0] - 'A' + 1, v = s[2] - 'A' + 1;
//		cout << u << " " << v << "\n";
		G[u].push_back(v);
		b[u] = 1, b[v] = 1;
		d[v]++;
		if (u == v) {
			cout << "Inconsistency found after " << i << " relations.";
			return 0;
		}
		int t = topsort(i);
		if (t == 0 or t == 1)
			return 0;
	}
	cout << "Sorted sequence cannot be determined.";
	return 0;
}
/*
Sorted sequence cannot be determined.
Sorted sequence determined after xxx relations: yyy...y.
*/

开 O2 之后 WA on #9 和 Subtask#1

不开就过了

2023/12/2 15:44
加载中...