hdoj畅通工程系列题目(accept代码)
来源:互联网 发布:mysql忘记密码 编辑:程序博客网 时间:2024/05/15 17:31
1232 畅通工程
#include<stdio.h>int a[1005];int find(int x){ int r=x; while(r!=a[r]) r=a[r]; int i=x,j; //-- while(i!=r){ // | j=a[i]; // |-压缩路径 a[i]=r; // |-可有可无 i=j; // | } //-- return r;}void join(int x,int y){ int fx=find(x); int fy=find(y); if(fx!=fy) a[fx]=fy;}int main(){ int n,m,i,j,x,y,ans; while(scanf("%d%d",&n,&m),n){ ans=0; for(i=1;i<=n;i++) a[i]=i; for(i=0;i<m;i++){ scanf("%d%d",&x,&y); join(x,y); } for(i=1;i<=n;i++) if(a[i]==i) ans++; printf("%d\n",ans-1); } return 0;}
1233 还是畅通工程
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int pre[105];int n,m;struct ak{ int s,c,l;}a[5010];int cmp(ak k,ak g){ return k.l<g.l;}void init(){ for(int i=1;i<=n;i++) pre[i]=i;}int find(int x){ int r=x; while(r!=pre[r]) r=pre[r]; return r;}bool join(int x,int y){ int fx=find(x); int fy=find(y); if(fx!=fy){ pre[fx]=fy; return true; } return false;}int main(){ while(scanf("%d",&n),n){ m=n*(n-1)/2; for(int i=0;i<m;i++) scanf("%d%d%d",&a[i].s,&a[i].c,&a[i].l); sort(a,a+m,cmp); init(); int an=0; for(int i=0;i<m;i++){ if(join(a[i].s,a[i].c)) an+=a[i].l; } printf("%d\n",an); } return 0;}
1863 畅通工程
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int per[1010];void init(int n){ for(int i=1;i<=n;i++) per[i]=i;}struct node{ int s,c,l;}a[10050];int cmp(node k,node g){ return k.l<g.l;}int find(int x){ int r=x; while(r!=per[r]) r=per[r]; return r;}bool join(int x,int y){ int fx=find(x); int fy=find(y); if(fx!=fy){ per[fx]=fy; return true; } return false;}int main(){ int n,m,i,j; while(scanf("%d",&n),n){ scanf("%d",&m); init(m); for(i=0;i<n;i++) scanf("%d%d%d",&a[i].s,&a[i].c,&a[i].l); sort(a,a+n,cmp); int total=0,sum=0; for(i=0;i<n;i++){ if(join(a[i].s,a[i].c)){ total++; sum+=a[i].l; } if(total==m-1) break; } if(total==m-1) printf("%d\n",sum); else printf("?\n"); } return 0;}
1874 畅通工程续
#include<stdio.h>#include<string.h>#define M 0x3f3f3f3fint n,m,k,t;int a[201][201];int dis[201];int vis[201];int minn(int a,int b){ return a>b?b:a;}void dijkstra(){ for(int i=0;i<n;i++){ dis[i]=M; vis[i]=0; } dis[k]=0; while(1){ int v=-1; for(int i=0;i<n;i++) if(!vis[i]&&(v==-1||dis[i]<dis[v])) v=i; if(v==-1) break; vis[v]=1; for(int i=0;i<n;i++){ dis[i]=minn(dis[i],dis[v]+a[v][i]); } } if(dis[t]==M) printf("-1\n"); else printf("%d\n",dis[t]);}int main(){ int i,s,c,l,j; while(scanf("%d%d",&n,&m)!=EOF){ for(i=0;i<n;i++) for(j=0;j<n;j++) a[i][j]=M; for(i=0;i<m;i++){ scanf("%d%d%d",&s,&c,&l); if(a[s][c]>l){ a[s][c]=l; a[c][s]=l; } } scanf("%d%d",&k,&t); dijkstra(); } return 0;}
1875 畅通工程再续
#include<stdio.h>#include<string.h>#include<algorithm>#include<math.h>using namespace std;#define M 0x3f3f3f3fint n,m;int x[101],y[101];double map[101][101];void prim(){ int v[101],pos,i,j; double total=0,dis[101],min=0; memset(v,0,sizeof(v)); v[1]=1; for(i=1;i<=n;i++) if(i!=1) dis[i]=map[1][i]; dis[1]=0; pos=1; for(i=2;i<=n;i++){ min=M; for(j=1;j<=n;j++){ if(!v[j]&&dis[j]<min){ min=dis[j]; pos=j; } } if(min==M){ printf("oh!\n"); return ; } total+=min; v[pos]=1; for(j=1;j<=n;j++){ if(!v[j]&&dis[j]>map[pos][j]) dis[j]=map[pos][j]; } } printf("%.1lf\n",total*100.0); return ;}int main(){ int t,i,j; scanf("%d",&t); while(t--){ scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]); for(i=1;i<=n;i++) for(j=1;j<=n;j++){ map[i][j]=map[j][i]=sqrt(1.0*((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]))); if(map[i][j]>1000||map[i][j]<10) map[i][j]=map[j][i]=M; } prim(); } return 0;}
1879继续畅通工程
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int n,m;int pre[101];struct ak{ int s,c,l;}a[10000],b[10000];void init(){ for(int i=0;i<=n;i++) pre[i]=i;}int cmp(ak d,ak s){ return d.l<s.l;}int find(int x){ int r=x; while(r!=pre[r]) r=pre[r]; int i=x,j; if(i!=r){ j=pre[i]; pre[i]=r; i=j; } return r;}bool join(int x,int y){ int fx=find(x); int fy=find(y); if(fx!=fy){ pre[fx]=fy; return true; } return false;}int main(){ while(scanf("%d",&n),n){ int i,j,g,w=0,q=0; int x,y,z,k; g=n*(n-1)/2; for(i=0;i<g;i++){ scanf("%d%d%d%d",&x,&y,&z,&k); if(k==0){ a[q].s=x; a[q].c=y; a[q++].l=z; } else{ b[w].s=x; b[w].c=y; b[w++].l=z; } } init(); sort(a,a+q,cmp); int total=0; for(i=0;i<w;i++) join(b[i].s,b[i].c); for(i=0;i<q;i++) if(join(a[i].s,a[i].c)){ total+=a[i].l; } printf("%d\n",total); } return 0;}
0 0
- hdoj畅通工程系列题目(accept代码)
- HDOJ 题目1232 畅通工程(并查集)
- HDOJ 题目1032畅通工程(并查集)
- HDOJ题目1863畅通工程(最小生成树)
- HDOJ 题目1233 还是畅通工程(最小生成树,模板)
- HDOJ题目1875畅通工程再续(基础最小生成树)
- HDOJ题目1879继续畅通工程(基础最小生成树)
- HDOJ 题目1233还是畅通工程(最小生成树,kruskal模板)
- HDOJ 题目1874 畅通工程续(简单最短路径)
- Num 18: HDOJ: 题目1232 : 畅通工程 [ 并查集 ]
- HDOJ 1863 畅通工程
- HDOJ 畅通工程
- HDOJ 畅通工程
- HDOJ 继续畅通工程
- HDOJ 还是畅通工程
- HDOJ 畅通工程续
- HDOJ 1232 畅通工程
- HDOJ 1232 畅通工程
- 畅谈Perl时间处理函数用法
- POJ 3764 The xor-longest Path(字典树 + 贪心)
- java并发-读书笔记
- 零基础学python-5.4 数字精度与复数
- DOM javascript
- hdoj畅通工程系列题目(accept代码)
- Non-ASCII character '\xe8' in file xxx.py on line 8, but no encoding declared
- Bad horse(图的广度遍历解法)
- 智能指针auto_ptr源码
- 如何用Cocoapods创建一个开源库
- VMware安装linux虚拟系统如何链接外网?
- C++_编写动态链接库
- tableview动态算一次高度的方法
- hdu(1069)——Monkey and Banana(LIS变形)