上海微网站,注册安全工程师官网,win10搭建服务器做网站,西安网络科技有限公司有哪些之前一直用的是tarjan第一次学习到这个来试一下。 唔#xff0c;就是裸的算法#xff0c;然后如果出度为0的点只有一个#xff0c;输出这个点的大小。 #includeiostream
#includecstdio
#includecstring
#includealgorithm
#includeque…之前一直用的是tarjan第一次学习到这个来试一下。 唔就是裸的算法然后如果出度为0的点只有一个输出这个点的大小。 #includeiostream
#includecstdio
#includecstring
#includealgorithm
#includequeue
#includestack
#define mm 200004
#define mn 10020
using namespace std;
stackints;
queueintq;
struct ding{int to,next,sum;
}edge[mm],edge2[mm];
struct ding2{int xx,yy;
}a[mm];
int vis[mn],now[mn],ans,head[mn],head2[mn],node[mn],size[mn],num;
int ru[mn],n,m,vv;
bool cmp(ding2 k1,ding2 k2)
{return (node[k1.xx]node[k2.xx]?node[k1.yy]node[k2.yy]:node[k1.xx]node[k2.xx]);}
void dfs(int x)
{if (vis[x]) return;vis[x]true;for (int ihead[x];i;iedge[i].next) dfs(edge[i].to);s.push(x);
}
void redfs(int x)
{if (node[x]) return;node[x]num; size[num];for (int ihead2[x];i;iedge2[i].next) redfs(edge2[i].to);
}
void add(int u,int v,ding*g,int*f)
{int pg[0].sum;g[p].tov; g[p].nextf[u];f[u]p;
}
int main()
{//freopen(cow4.in,r,stdin);//freopen(cow4.out,w,stdout);scanf(%d%d,n,m);for (int i1;im;i){scanf(%d%d,a[i].xx,a[i].yy);add(a[i].xx,a[i].yy,edge,head);add(a[i].yy,a[i].xx,edge2,head2);}for (int i1;in;i) if (!vis[i])dfs(i);while (!s.empty()){if (!node[s.top()]) {num; redfs(s.top());}s.pop();}for (int i1;im;i) if (node[a[i].xx]node[a[i].yy]){int ta[i].xx;a[i].xxa[i].yy;a[i].yyt;}sort(a1,a1m,cmp);int t10,t20;for (int i1;im;i){ if ((node[a[i].xx]t1)(node[a[i].yy]t2)||(node[a[i].xx]node[a[i].yy])) continue;t1node[a[i].xx];t2node[a[i].yy];ru[t1];}for (int i1;inum;i) if (ru[i]0) anssize[i],vv; if (vv1) printf(%d\n,ans);else printf(0\n);return 0;
} 转载于:https://www.cnblogs.com/2014nhc/p/7598867.html