首页 > 代码库 > POJ——T3352 Road Construction
POJ——T3352 Road Construction
http://poj.org/problem?id=3352
vis[0]表示树边, 1 表示后向边,2 表示
1 #include <algorithm> 2 #include <cstring> 3 #include <cstdio> 4 5 using namespace std; 6 7 const int N(2017); 8 int n,m,u,v,ans; 9 int head[N],sumedge;10 struct Edge11 {12 int to,next;13 Edge(int to=0,int next=0) :14 to(to),next(next) {}15 }edge[N<<1];16 17 void ins(int from,int to)18 {19 edge[++sumedge]=Edge(to,head[from]);20 head[from]=sumedge;21 }22 23 int tim,dfn[N],low[N],vis[N],du[N];24 int sumcol,col[N],colvis[N];25 26 void DFS(int now,int pre)27 {28 low[now]=dfn[now]=++tim;29 vis[now]=1;30 for(int i=head[now];i;i=edge[i].next)31 {32 int go=edge[i].to;33 if(go==pre) continue;34 if(!vis[go])35 {36 DFS(go,now);37 low[now]=min(low[now],low[go]);38 } else if(vis[go]==1)39 low[now]=min(low[now],dfn[go]);40 }41 vis[now]=2;42 }43 44 int main()45 {46 scanf("%d%d",&n,&m);47 for(;m;m--)48 {49 scanf("%d%d",&u,&v);50 ins(u,v); ins(v,u);51 }52 for(int i=1;i<=n;i++)53 if(!vis[i]) DFS(i,i);54 for(u=1;u<=n;u++)55 for(int j=head[u];j;j=edge[j].next)56 {57 v=edge[j].to;58 if(low[u]!=low[v])59 du[low[u]]++;60 }61 for(int i=1;i<=n;i++)62 if(du[i]==1) ans++; 63 printf("%d\n",(ans+1)>>1);64 return 0;65 }
POJ——T3352 Road Construction
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。