。。。。。。。。。

  1 //hdu   1232
  2 #include <iostream>
  3 #include <cstdio>
  4 #include <cstring>
  5 #include <algorithm>
  6 #include <set>
  7 #include <map>
  8 #include <vector>
  9 #include <cmath>
 10 using namespace std;
 11 typedef long long ll;
 12 const int inf=0x3f3f3f3f;
 13 const int N=2e3+9;
 14 int n,m;
 15 int pre[N];
 16 int find(int x)
 17 {
 18     int r,j;
 19     r=x;
 20     while(r!=pre[r])
 21         r=pre[r];//查找根节点
 22     while(x!=r){//路径压缩,路上的所有点的父节点都是根节点
 23         j=pre[x];
 24         pre[x]=r;
 25         x=j;           
 26     }
 27     return  r;
 28 }
 29 void join(int x,int y)
 30 {
 31     int   xx=find(x);
 32     int   yy=find(y);
 33     if(xx!=yy){
 34         pre[yy]=xx;
 35     }
 36     return  ;
 37 }
 38 void init(int  n)
 39 {
 40 for(int i=1;i<=n;i++)
 41 {
 42     pre[i]=i;
 43 }
 44 }
 45 int main()
 46 {
 47     while(~scanf("%d",&n)){
 48         if(n==0)
 49             break;
 50         scanf("%d",&m);
 51         init(n);
 52         int   x,y;
 53         for(int i=0;i<m;i++)
 54         {
 55             scanf("%d%d",&x,&y);
 56             join(x,y);
 57         }
 58         int ans=0;
 59         for(int i=1;i<=n;i++)
 60         {
 61             if(pre[i]==i)
 62                 //if(find(i)==i)
 63                 //pre[i]也就是find[i]
 64                 ans++;
 65         }
 66         printf("%d\n",ans-1);
 67     
 68     }
 69         return  0;
 70 }
 71 

72 //2018年全国多校算法寒假训练营练习比赛(第四场) 73 //B 道路建设 74 //最小生成树 prim 算法 75 #include <iostream> 76 #include <cstdio> 77 #include <cstdlib> 78 #include <cstring> 79 #include <iostream> 80 #include <algorithm> 81 #include <cmath> 82 #include <queue> 83 #include <vector> 84 using namespace std; 85 #define pi acos(-1.0) 86 const int N=150; 87 int n,m,c; 88 int ans; 89 int pre[N]; 90 struct Node{ 91 int u,v,w; 92 }node[N*100]; 93 bool cmp(Node a,Node b) 94 { 95 return a.w<b.w; 96 } 97 void init() 98 { 99 for(int i=1;i<m;i++) 100 { 101 pre[i]=i; 102 } 103 } 104 int find(int x) 105 { 106 int r,j; 107 r=x; 108 while(r!=pre[r]) 109 r=pre[r]; 110 while(x!=r) 111 { 112 j=pre[x]; 113 pre[x]=r; 114 x=j; 115 } 116 return r; 117 } 118 int main() 119 { 120 scanf("%d%d%d",&c,&n,&m); 121 init(); 122 for(int i=0;i<n;i++) 123 { 124 scanf("%d%d%d",&node[i].u,&node[i].v,&node[i].w); 125 } 126 sort(node,node+n,cmp); 127 int ret=m; 128 int ans=0; 129 for(int i=0;i<n;i++) 130 { 131 if(ret>1){ 132 int uu=find(node[i].u); 133 int vv=find(node[i].v); 134 if(uu!=vv)//不能有回路 135 { 136 ret--; 137 pre[vv]=uu; 138 ans+=node[i].w; 139 } 140 } 141 } 142 if(ret==1&&ans<=c) 143 { 144 printf("Yes\n"); 145 } 146 else{ 147 printf("No\n"); 148 } 149 return 0; 150 }

 

posted on 2018-07-12 18:19  cltt  阅读(543)  评论(0编辑  收藏  举报

导航