HDU1863畅通工程
来源:互联网 发布:剑灵人男捏脸数据吧 编辑:程序博客网 时间:2024/06/06 04:53
这是我第一次接触图论。。。
这个题不难,是并查集和Kruskal算法的应用
就是先对边进行排序,判断两个点的关系。。。
#include<stdio.h>
#include<stdlib.h>
#define MAX 9999999
int i,k,f1,f2,m,n,sum;
int father[101];
struct NODE{
int u; // 起点
int v; // 终点
int w; // 权值
}G[MAX];
int find(int x) // 求点的父结点
{
if(father[x]!=x) father[x]=find(father[x]);
return father[x];
}
int cmp(const void *a,const void *b) // 对边进行从小到大的排序
{
struct NODE *c = (struct NODE *)a;
struct NODE *d = (struct NODE *)b;
return c->w - d->w;
}
void Kruskal()
{
sum=0;
for(i=1;i<=n;i++) father[i]=i;
for(i=1,k=1;i<=n && k<m;i++){
f1=G[i].u; f2=G[i].v;
f1=find(f1); f2=find(f2);
if(f1!=f2){
sum+=G[i].w;
k++;
if(f1>f2) father[f1]=f2;
else father[f2]=f1;
}
}
if(k==m) printf("%d\n",sum);
else printf("?\n");
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF && n)
{
for(i=1;i<=n;i++) scanf("%d%d%d",&G[i].u,&G[i].v,&G[i].w);
qsort(G,n,sizeof(G[1]),cmp);
Kruskal();
}
system("pause");
return 0;
}
- 畅通工程 hdu1863
- HDU1863畅通工程
- HDU1863--畅通工程
- hdu1863-畅通工程
- hdu1863 畅通工程
- HDU1863 畅通工程
- HDU1863畅通工程
- hdu1863畅通工程
- hdu1863 畅通工程 kruskal
- hdu1863畅通工程
- HDU1863:畅通工程(kruskal)
- HDU1863 畅通工程
- HDU1863----畅通工程
- hdu1863-畅通工程
- HDU1863 畅通工程
- 【prim】HDU1863畅通工程
- hdu1863 畅通工程
- hdu1863 畅通工程
- Bash引号的那点事
- Flex点击弹出菜单示例
- 设计模式笔记——Bridge
- 【Java基础 006】 Applet类中getDocumentBase()和getCodeBase()区别
- jdk与jre的区别
- HDU1863畅通工程
- 多功能iPad外壳The Swing Mount
- opencv 将两张图片显示到一幅图片中
- delphi修改注册表那些常用操作(续)
- 迭代器模式
- HTML5中使用拖拽实例(二)
- TortoiseSVN实用经验总结
- Java ant 依赖包一并打包
- IOS学习笔记27—使用GDataXML解析XML文档