首页 > 编程知识 正文

建设银行网上银行,如何在洛谷上发表题解

时间:2023-05-04 10:29:08 阅读:258673 作者:3912

正zjdqz/pphdzspdcdtn二题:上白泽慧音      这道题就是裸裸的Tarjan强联通咯~      我们找出每个环,判断一下每个环的大小。排一下序输出即可。代码<模板要背熟>

#include<cstdio>#include<cstdlib>#include<cstring>#include<vector>#include<stack>#include<algorithm>using namespace std;int n,m;struct edge{int y,next;}s[200010];int first[10010];int len=0;int mmax,maxi;vector<int> T[10010];int tot=0;struct node{int dfn,low;}op[10010];stack<int> f;int now=0;bool tf[10010];bool we[10010];void ins(int x,int y){len++;s[len].y=y;s[len].next=first[x];first[x]=len;}void Tarjan(int x){we[x]=true;op[x].dfn=op[x].low=++now;tf[x]=true;f.push(x);for(int i=first[x];i!=0;i=s[i].next){int y=s[i].y;if(op[y].dfn==0){Tarjan(y);if(op[y].low<op[x].low) op[x].low=op[y].low;}else if(tf[y]==true)if(op[y].dfn<op[x].low) op[x].low=op[y].dfn;}if(op[x].dfn==op[x].low){tot++;while(1){int k=f.top();f.pop();T[tot].push_back(k);tf[k]=false;if(k==x) break;}sort(T[tot].begin(),T[tot].end());if(T[tot].size()>mmax){mmax=T[tot].size();maxi=tot;}else if(T[tot].size()==mmax && T[tot][0]<T[maxi][0]){mmax=T[tot].size();maxi=tot;}}}int main(){scanf("%d %d",&n,&m);for(int i=1;i<=m;i++){int x,y,c;scanf("%d %d %d",&x,&y,&c);if(c==2) ins(x,y),ins(y,x);else ins(x,y);}int tt=0;for(int i=1;i<=n;i++)if(we[i]==false) Tarjan(i);printf("%dn",mmax);for(int i=0;i<mmax;i++)printf("%d ",T[maxi][i]);}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。