码迷,mamicode.com
首页 > 其他好文 > 详细

【CF659E】New Reform

时间:2016-05-29 21:20:33      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

分析转载自http://blog.csdn.net/yukizzz/article/details/51029628

题意:

给定n个点和m条双向边,将双向边改为单向边,问无法到达的顶点最少有多少个?

分析:

无法到达的话即入度为0。 
DFS判断每一个连通块中是否存在环,如果存在环,就能保证环中每个点的入度都大于等于1。否则,有头有尾,头的入度为0。

技术分享
 1 var head,vet,next,flag:array[1..200000]of longint;
 2     n,m,x,y,tmp,ans,tot,i:longint;
 3 
 4 procedure add(a,b:longint);
 5 begin
 6  inc(tot);
 7  next[tot]:=head[a];
 8  vet[tot]:=b;
 9  head[a]:=tot;
10 end;
11 
12 procedure dfs(u,pre:longint);
13 var e,v:longint;
14 begin
15  if flag[u]=1 then begin tmp:=0; exit; end;
16  flag[u]:=1;
17  e:=head[u];
18  while e<>0 do
19  begin
20   v:=vet[e];
21   if v<>pre then dfs(v,u);
22   e:=next[e];
23  end;
24 end;
25 
26 begin
27 // assign(input,1.in); reset(input);
28  //assign(output,1.out); rewrite(output);
29  readln(n,m);
30  for i:=1 to m do
31  begin
32   read(x,y);
33   add(x,y);
34   add(y,x);
35  end;
36  for i:=1 to n do
37   if flag[i]=0 then
38   begin
39    tmp:=1;
40    dfs(i,0);
41    ans:=ans+tmp;
42   end;
43  writeln(ans);
44 // close(input);
45  //close(output);
46 end.
View Code

 

【CF659E】New Reform

标签:

原文地址:http://www.cnblogs.com/myx12345/p/5540318.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!