HDU 1879 继续畅通工程(Prim||Kruscal模板题)
2024-09-19 05:29:32
Prim(点归并)
//异或运算:相同为假,不同为真
#include<cstdio>
#include<algorithm>
#define maxn 105
using namespace std;
int n,m,sum,flag;
int fa[maxn];
struct Edge
{
int u,v,w;
bool operator<(const Edge &cmp)const{
return w<cmp.w;
}
}edge[maxn*maxn>>]; int Findset(int x)
{
if(fa[x]==x) return fa[x]=x;
else return fa[x]=Findset(fa[x]);
}
int main()
{
while(scanf("%d",&n),n){
m=(n-)*n/;
for(int i=;i<=n;i++)
fa[i]=i;
for(int i=;i<m;i++){
scanf("%d%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w,&flag);
if(flag)
fa[edge[i].u]=edge[i].v;
}
sort(edge,edge+m);
sum=;
for(int i=;i<m;i++){
int x=Findset(edge[i].u);
int y=Findset(edge[i].v);
if(x!=y){
fa[x]=y;
sum+=edge[i].w;
}
}
printf("%d\n",sum);
}
}
Kruscal(边归并)
#include<cstdio>
#include<cstring>
#define INF 0x3f3f3f3f
#define maxn 105
int i,j,k,n,m,min,sum;
int lowcost[maxn],visit[maxn];
int graph[maxn][maxn];
void Prim()
{
sum=;
memset(visit,,sizeof(visit));
visit[]=;
for(i=;i<=n;i++)
lowcost[i]=graph[][i];
for(i=;i<=n;i++){
min=INF;
for(j=;j<=n;j++){
if(!visit[j]&&min>lowcost[j]){
min=lowcost[j];
k=j;
}
}
sum+=lowcost[k];
visit[k]=;
for(j=;j<=n;j++){
if(!visit[j]&&lowcost[j]>graph[k][j])
lowcost[j]=graph[k][j];
}
}
} int main()
{
int a,b,c,d;
while(scanf("%d",&n),n){
m=(n-)*n/;
memset(graph,INF,sizeof(graph));
while(m--){
scanf("%d%d%d%d",&a,&b,&c,&d);
if(d) graph[a][b]=graph[b][a]=;
else graph[a][b]=graph[b][a]=c;
}
Prim();
printf("%d\n",sum);
}
return ;
}
最新文章
- java 文件压缩和解压(ZipInputStream, ZipOutputStream)
- iOS沙盒路径变化的说明详解
- jQuery延迟加载(懒加载)插件 – jquery.lazyload.js
- sql语句与数据库2
- JSBinding + SharpKit / JavaScript 加载流程
- 深入浅出 RPC - 浅出篇+深入篇
- Epic - Coin Change
- MVC 小常识
- 语音频谱语音信号处理之(四)梅尔频率倒谱系数(MFCC)
- leetcode-006 detect cycle
- CSS3学习笔记-1:CSS样式继承
- 【ASP.NET MVC 学习笔记】- 10 Controller和Action(1)
- 广义线性模型 R--glm函数
- JS一直是单线程,异步(定时器,ajax请求等)是由浏览器来实现的!(转)
- 弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
- ionic3搭建笔记及编译成apk
- springcloud config
- 1st,Python基础——01
- 【bzoj2876】 Noi2012—骑行川藏
- www.sojson.com网站高级JS加密破解