30分求调
  • 板块P1347 排序
  • 楼主New_Void
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/2/5 12:17
  • 上次更新2025/2/5 13:55:43
查看原帖
30分求调
1048576
New_Void楼主2025/2/5 12:17
#include <bits/stdc++.h>
using namespace std;
vector<int> e[26];
int deg[26];
int q[26],head,tail,n,m;
int ans[26];
int topo(){
    memset(deg,0,sizeof(deg));
    for (int i=0;i<n;i++){
        for (int j=0;j<(int)e[i].size();j++){
            deg[e[i][j]]++;
        }
    }
    head=0,tail=-1;
    for (int i=0;i<n;i++){
        if (deg[i]==0){
            q[++tail]=i;
        }
    }
    int c=0;
    while (head<=tail){
        if (tail-head+1>1){
            return -1;
        }
        int now=q[head++];
        ans[c++]=now;
        for (int i=0;i<(int)e[now].size();i++){
            deg[e[now][i]]--;
            if (deg[e[now][i]]==0){
                q[++tail]=e[now][i];
            }
        }
    }
    if (c==n){
        return 1;
    }
    else{
        return 0;
    }
}
int main(){
    cin>>n>>m;
    for (int i=1;i<=m;i++){
        char a,d,b;
        cin>>a>>d>>b;
        e[a-'A'].push_back(b-'A');
        int ss=topo();
        if (ss==1){
            cout<<"Sorted sequence determined after "<<i<<" relations: ";
            for (int j=0;j<n;j++){
                cout<<char(ans[j]+'A');
            }
            cout<<".";
            return 0;
        }
        else if(ss==0){
            cout<<"Inconsistency found after "<<i<<" relations.";
            return 0;
        }
    }
    cout<<"Sorted sequence cannot be determined.";
    return 0;
}
2025/2/5 12:17
加载中...