看卿学姐视频学到的题目

kruskal算法实现最小生成树

#include<bits/stdc++.h>
using namespace std;
const int maxn = ;
typedef long long ll;
int n,m;
struct edge{
int from ,to;
ll cost;
}E[maxn*maxn];
bool cmp(edge a,edge b)
{
return a.cost < b.cost;
}
int fa[maxn];
void init()
{
for(int i=; i <= maxn; i++)
fa[i] = i;
}
int fi(int x)
{
return fa[x] == x? x :fa[x] = fi(fa[x]);
} void Union(int x,int y)
{
int f1=fi(x);
int f2=fi(y);
if(f1 != f2)
fa[f1] = f2;
} bool check(int x,int y)
{
return fi(x) == fi(y);
} ll kruskal()
{
ll cnt = ;
sort(E+,E++m,cmp);
for(int i=;i <= m;i++)
{
if(check(E[i].from,E[i].to)) continue;
Union(E[i].from,E[i].to);
cnt += E[i].cost;
}
return cnt;
} int main ()
{
while (~scanf("%d %d",&m,&n) && m){
init();
for(int i=;i <= m;i++)
{
scanf("%d %d %lld",&E[i].from,&E[i].to,&E[i].cost);
}
ll res = kruskal();
for(int i=; i <=n;i++)
if(!check(i,))
res = -;
if(res == -)
puts("?");
else
printf("%lld\n",res);
}
return ;
}

prim 算法实现  (坑点好多  还要多写写 熟练一些

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = ;
int n,m;
struct edge{
int to;
ll cost;
edge(){}
edge(int tt,ll cc):to(tt),cost(cc){}
bool operator < (const edge &l)const{
return l.cost < cost;
}
}; priority_queue<edge> que;
vector <edge> G[maxn];
bool vis[maxn]; void init()
{
memset(vis,,sizeof(vis));
while (que.size())
que.pop();
for(int i=;i <= n;i++)
G[i].clear();
} ll prim()
{
vis[] = ;//要把1先加进去
ll cnt = ;
for(int i=; i < G[].size();i++)//从第一个顶点取出最短的边
que.push( G[][i] );
while(que.size())
{
edge e = que.top();
que.pop();
if(vis[e.to])
continue;
vis[e.to] = ;
cnt += e.cost;
for(int i=;i< G[e.to].size();i++)
que.push(G[e.to][i]);
//cout << cnt<<endl;
}
return cnt;
} int main ()
{
while (~scanf("%d %d",&m,&n) && m){
init();
for(int i=;i <= m;i++)
{
int u,v;
ll cost;
scanf("%d %d %lld",&u,&v,&cost);
G[u].push_back(edge(v,cost));
G[v].push_back(edge(u,cost));
} ll res = prim();
for(int i=; i <= n;i++)
if( vis[i] == )
res = -;
// for(int i=1; i <= n;i++)
// printf("%d",vis[i]);
if(res == -)
puts("?");
else
printf("%lld\n",res);
}
return ;
}

HDU 1863 畅通工程 (最小生成树的更多相关文章

  1. HDU 1863 畅通工程(最小生成树,prim)

    题意: 给出图的边和点数,要求最小生成树的代价,注:有些点之间是不可达的,也就是可能有多个连通图.比如4个点,2条边:1-2,3-4. 思路: 如果不能连通所有的点,就输出‘?’.之前以为每个点只要有 ...

  2. HDU 1863 畅通工程 最小生成树

    思路: 比较典型的最小生成树的题目了..在这里用求最小生成树的经典算法K(Kruskal)算法和P(Prim)算法.我的 K 算法用的是结构体来存图,P 算法用的是邻接矩阵来存图,K算法的复杂度是O( ...

  3. hdu 1863 畅通工程 (并查集+最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    M ...

  4. <hdu - 1863> 畅通工程 并查集和最小生成树问题

    本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863  Problem Description: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以 ...

  5. hdu 1863 - 畅通工程(MST)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. 题解报告:hdu 1863 畅通工程

    Problem Description 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可 ...

  7. HDU 1863 畅通工程

    畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  8. HDU 1863 畅通工程(Prim算法求解MST)

    题目: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本.现 ...

  9. HDU 1863 畅通工程 克鲁斯卡尔算法

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  10. HDU 1863 畅通工程(Kruskal)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

随机推荐

  1. oracle(九)索引扫描

    (1)索引唯一扫描(index unique scan) (2)索引范围扫描(index range scan) (3)索引全扫描(index full scan) (4)索引快速扫描(index f ...

  2. git使用简单指南

    参考: https://www.fengerzh.com/git-reset/?utm_source=tool.lu git建库小结 (一)远端:1.在git网站上建设一个远程仓库复制git远程仓库地 ...

  3. 前端 HTML body标签相关内容 常用标签 换行标签 br

    换行标签 <br> <br>标签用来将内容换行,其在HTML网页上的效果相当于我们平时使用word编辑文档时使用回车换行. 在第一行中间加上br <!DOCTYPE ht ...

  4. 9 jmeter之检查点

    jmeter有类似loadrunner检查点的功能,就是断言中的响应断言. 1.响应断言(对返回文字结果进行相应的匹配)右击请求-->添加-->断言-->响应断言-->添加“要 ...

  5. PHPExcel使用-使用PHPExcel导入文件

    导入步骤: 1. 实例化excel读取对象 2. 加载excel文件 ----------------> ( 1>. 全部加载. 2>. 选择加载. ) 3. 读取excel文件 - ...

  6. 飞跃平野(sdut1124)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1124 飞跃原野 Time Limit: 500 ...

  7. 【Win7 x64】+【annaconda3】+ 【python3.5.2】+【tensorflow-gpu】 [最终配置 gtx 940mx + Cuda8.0+cudnn v5.1 + tensorflow-gpu1.0.0 ]

    1.安装cuda Toolkit 和cudnn (百度云可下载,版本需要对应) 2.配置环境变量: 3.安装cudnn(需要拷贝一些dll和lib来进行配置) 4.进入cmd,找到anaconda3的 ...

  8. python基础24 -----python中的各种锁

    一.全局解释器锁(GIL) 1.什么是全局解释器锁 在同一个进程中只要有一个线程获取了全局解释器(cpu)的使用权限,那么其他的线程就必须等待该线程的全局解释器(cpu)使 用权消失后才能使用全局解释 ...

  9. Genymotion虚拟镜像下载慢或者失败的解决办法

    Genymotion虚拟镜像下载慢或者失败的解决办法 http://files2.genymotion.com/dists/8.0.0/ova/genymotion_vbox86p_8.0_18061 ...

  10. Python Socket编程基础篇

    Socket网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...