上白泽慧音——原来Tarjan 适用混合图,原来String 排字典序的确坑(或者说我的脑袋太水?)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上白泽慧音——原来Tarjan 适用混合图,原来String 排字典序的确坑(或者说我的脑袋太水?)相关的知识,希望对你有一定的参考价值。

  模板强连通分量,强连通Tarjan 可以直接过,只是题目多了需要字典序比较并输出的需要。然而我偷懒想用String 储存所有计算出的强连通分量,然后sort 一遍输出,结果是提交了三次都是错的。看到别处题解的字典序求法,然后就改对了。

技术分享
 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<vector>
 5 #include<stack>
 6 #include<queue>
 7 using namespace std;
 8 const int N=5011;
 9 int n,m,num,cnt,val[N],low[N],col[N],coln[N],pri[N],res;
10 bool in[N];
11 vector<int> gr[N];
12 stack<int> s;
13 
14 void dfs(int x){
15     val[x]=low[x]=num++;
16     s.push(x);
17     in[x]=true;
18     
19     for(int i=0;i<gr[x].size();i++)
20         if(!val[gr[x][i]]){
21             dfs(gr[x][i]);
22             low[x]=min(low[x],low[gr[x][i]]);
23         }
24         else if(in[gr[x][i]])
25             low[x]=min(low[x],val[gr[x][i]]);
26     
27     if(low[x]==val[x]){
28         cnt++;
29         while(1){
30             int u=s.top();s.pop();
31             in[u]=false;
32             col[u]=cnt;
33             if(u==x)break;
34         }
35         
36     }
37 }
38 
39 int main(){
40     cin>>n>>m;
41     for(int i=1;i<=m;i++){
42         int x,y,z;scanf("%d%d%d",&x,&y,&z);
43         gr[x].push_back(y);
44         if(z==2)gr[y].push_back(x);
45     }
46     
47     for(int i=1;i<=n;i++)
48         if(!val[i])
49             dfs(i);
50     
51     for(int i=1;i<=n;i++){
52         coln[col[i]]++;
53         if(!pri[col[n]])pri[col[n]]=i;
54     }
55     
56     for(int i=1;i<=cnt;i++)
57         if(coln[col[i]]>coln[res]||(coln[col[i]]==coln[res]&&pri[col[i]]<pri[res]))
58             res=col[i];
59     cout<<coln[res]<<endl;
60     for(int i=1;i<=n;i++)
61         if(col[i]==res)
62             cout<<i<<" ";
63     cout<<endl;
64     return 0;
65 }
Method_01

  洛谷 Aqours 16ms

以上是关于上白泽慧音——原来Tarjan 适用混合图,原来String 排字典序的确坑(或者说我的脑袋太水?)的主要内容,如果未能解决你的问题,请参考以下文章

P1726 上白泽慧音 - Tarjan

WHYZOJ-#64 上白泽慧音(tarjan求强连通分量)

P1726 上白泽慧音

luogu P1726 上白泽慧音

[洛谷1726]上白泽慧音

codevs 1332 上白泽慧音