样例没过!求调!
  • 板块P1347 排序
  • 楼主Daniel_yao
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/7/25 15:13
  • 上次更新2023/10/27 18:30:09
查看原帖
样例没过!求调!
519573
Daniel_yao楼主2022/7/25 15:13
#include <iostream>
#include <cstring>
#include <algorithm>
#include <set>

using namespace std;

const int N = 605;

int n, m, cnt, k, nx[N], h[N], d[N], t = 0, hh = 1, df[N], sum, size;

char e[N], q[N];

set <int> s1;
 
void add(char u, char v){
	e[++cnt] = u, nx[cnt] = h[u], h[u] = cnt;  
} 

void toposort() {
	hh = 1, t = 0;
	for (char i = 'A'; i <= 'Z'; i++) {
		if(!df[i] && s1.count(i)){
			sum++;
			q[++t] = i;
		}
	}
	
	while(hh <= t) {
		char x = q[hh++];
		for (int i = h[x]; i; i = nx[i]) {
			int y = e[i];
			if(!(--df[y])) {
				sum++;
				q[++t] = y;
			}
		}
	}
	
}

void solve() {
	toposort();
	if(t == n) {
		printf("Sorted sequence determined after relations: ", k);
		for (int i = 1; i <= t; i++) {
			cout << q[i];
		}
		cout << '.' << '\n';
		exit(0);
	} 
	if(sum != size) {
		printf("Inconsistency found after %d relations.\n", k);
		exit(0);
	}
}

int main() {
	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		char u, op, v; 
		cin >> u >> op >> v;
		d[v]++;
		add(u, v);
		s1.insert(u), s1.insert(v);
		size = s1.size(), sum = 0;
		k = i;
		memcpy(df, d, sizeof d);
		solve();
	}
	printf("Sorted sequence cannot be determined.\n"); 
	return 0;
} 

2022/7/25 15:13
加载中...