。。。。。。。。。
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 }