社区讨论

玄关!!!

P1347[ECNA 2001] 排序参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lyb6731e
此快照首次捕获于
2024/07/07 14:26
2 年前
此快照最后确认于
2024/07/07 16:29
2 年前
查看原帖
蒟蒻最后一个过不了,求调,谢谢巨佬!
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,ans,num;
vector<int> vec[105];
int rudu[105],a[105];
bool st[105];
int get(char ch){
    return ch-'A';}
bool topo(int r){
    queue<int>q;
    int num=0;
    bool flag=1;
    int t[105];
       for(int i=0;i<n;i++){
        t[i]=rudu[i];
        if(!rudu[i]){
			q.push(i);
			st[i]=1;}}
    while(q.size()){
	    if(q.size()>1){
			flag=0;}
	    int k=q.front();
        a[num++]=k;
        q.pop();
        for(int i=0;i<vec[k].size();i++){
			t[vec[k][i]]--;}
        for(int i=0;i<n;i++){
            if(!t[i]&&!st[i]){
				q.push(i);
				st[i]=1;}}}
    if(num < n){return 0;}
    if(flag&&!ans){ans=r;}
    return 1;}
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        char c[3];
        cin>>c[0]>>c[1]>>c[2];
        int x=get(c[0]),y=get(c[2]);
        vec[x].push_back(y);
        rudu[y]++;
        if(!topo(i)){
            cout<<"Inconsistency found after "<<i<<" relations.";
            return 0;}
        memset(st,false,sizeof st);}
    if(ans){
        cout<<"Sorted sequence determined after "<<ans<<" relations: ";
        for(int i=0;i<n;i++)
			cout<<char(a[i]+'A');
        cout<<".";}
    else{cout<<"Sorted sequence cannot be determined.";}
    return 0;}
qwq

回复

1 条回复,欢迎继续交流。

正在加载回复...