HDU2120Ice_cream & #39; s world I (basic and query set)
Ice_cream's world ITime Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission (s): 698 Accepted Submission (s): 398
Problem Descriptionice_cream's world is a rich country, it has alias fertile lands. today, the queen of ice_cream wants award land to diligent ACMers. so there are some watchtowers are set up, and wall between watchtowers be build, in order to partition the ice_cream's world. but how many ACMers at most can be awarded by the queen is a big problem. one wall-surrounded land must be given to only one ACMer and no Wils are crossed, if you can help the queen solve this problem, you will be get a land.
InputIn the case, first two integers N, M (N <= 1000, M <= 10000) is represent the number of watchtower and the number of wall. the watchtower numbered from 0 to N-1. next following M lines, every line contain two integers A, B mean between A and B has a wall (A and B are distinct ). terminate by end of file.
OutputOutput the maximum number of ACMers who will be awarded.
One answer one line.
Sample Input
8 100 11 21 32 43 40 55 66 73 64 7
Sample Output
3
AuthorWiskey: There are several loops in the figure.
#include
const int N = 1015;int fath[N],n;void init(){ for(int i =0;i<=n;i++) fath[i]=i;}int findfath(int x){ if(x==fath[x]) return fath[x]; fath[x]=findfath(fath[x]); return fath[x];}int setfath(int x,int y){ x=findfath(x); y=findfath(y); if(x==y) return 1; fath[x]= y; return 0;}int main(){ int x,y,m,ans; while(scanf("%d%d",&n,&m)>0) { init(); ans=0; while(m--) { scanf("%d%d",&x,&y); ans+=setfath(x,y); } printf("%d\n",ans); }}