倒腾了一个小时  自己也没去看网上的

总算自己能写出来模板了

kruskal

//最小生成树  每次找最短的边
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = ;
int n,m;
ll res;
struct node
{
int st,e;
int cost;
}E[maxn];//建立边
int fa[maxn]; void init()
{
for(int i=;i<=n;i++)
fa[i] = i;
} int fi(int x)
{
return fa[x] == x? x : fa[x] = fi(fa[x]);
} void join(int x,int y)
{
int fx =fi(x),fy = fi(y);
if(fx != fy)
{
fa[fx] = fy;
}
} bool same(int x,int y)
{
return fi(x) == fi(y);
}
bool cmp(node a,node b)
{
return a.cost < b.cost;
} void solve()
{
init();
res = ;
sort(E+,E++m,cmp);
for(int i=;i<=m;i++)
{
node now = E[i];
if(same(now.st,now.e))
continue; //之前建立过边的 直接跳过
join(now.st,now.e);
res += E[i].cost;
}
} int main()
{
//freopen("in.txt","r",stdin);
while (~scanf("%d %d",&n,&m) )
{
for(int i=;i<=m;i++)
{
int x,y,v;
scanf("%d %d %d",&x,&y,&v);
E[i].st = x;
E[i].e = y;
E[i].cost = v;
}
solve();
bool flag = ;
for(int i=;i<=n;i++)
{
if(!same(,i))
{
flag =;break;
}
}
if(flag)
puts("orz");
else
cout<<res<<endl;
}
}

prim

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = ;
struct node {
int to,cost;
node (int t,int c):to(t),cost(c){}
bool operator<(const node& l)const
{
return cost > l.cost;
}
};
vector<node> E[maxn];
priority_queue<node> Q;
bool vis[maxn];
ll d[maxn];
int main ()
{
int n,m;
cin>> n>>m;
for(int i=;i<=m;i++)
{
int x,y,v;
scanf("%d %d %d",&x,&y,&v);
E[x].push_back({y,v});
E[y].push_back({x,v});
}
for(int i=;i<E[].size();i++)
Q.push(E[][i]);
d[] = ;vis[] = ;
ll res=;
while (Q.size())
{
node now = Q.top();
Q.pop();
if(vis[now.to])
continue;
res += now.cost;
vis[now.to] =;
for(int i=;i <E[now.to].size();i++)
{
Q.push(E[now.to][i]);
}
}
bool flag = ;
for(int i=;i<=n;i++)
{
if(!vis[i])
{
flag =;
break;
}
}
if(flag )
puts("orz");
else
cout<<res<<endl;
}

luogu p3366 最小生成树模板的更多相关文章

  1. 【原创】洛谷 LUOGU P3366 【模板】最小生成树

    P3366 [模板]最小生成树 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N ...

  2. Luogu P3366 【模板】最小生成树

    qwq #include<cstdio> #include<algorithm> using namespace std; ]; int n,m; struct abc { i ...

  3. 【luogu P3366 最小生成树】 模板

    这里是kruskal做法 当然prim也可以,至于prim和kruskal的比较: Prim在稠密图中比Kruskal优,Kruskal在稀疏图中比Prim优. #include<bits/st ...

  4. 【luogu P3366 最小生成树】 题解 Prim

    include include include include using namespace std; const int maxn = 505000; int n, m, dis[maxn], v ...

  5. 洛谷P3366 【模板】最小生成树 题解

    题目链接:https://www.luogu.org/problem/P3366 最小生成树模板题. Kruskal算法 算法思想:给边按边权从小到大排序,然后遍历每一条边,如果边上的两个点不在同一个 ...

  6. 最小生成树 & 洛谷P3366【模板】最小生成树 & 洛谷P2820 局域网

    嗯... 理解生成树的概念: 在一幅图中将所有n个点连接起来的n-1条边所形成的树. 最小生成树: 边权之和最小的生成树. 最小瓶颈生成树: 对于带权图,最大权值最小的生成树. 如何操作? 1.Pri ...

  7. 洛谷P3366 【模板】最小生成树

    P3366 [模板]最小生成树 319通过 791提交 题目提供者HansBug 标签 难度普及- 提交  讨论  题解 最新讨论 里面没有要输出orz的测试点 如果你用Prim写了半天都是W- 题目 ...

  8. P3366 【模板】最小生成树(boruvka/sollin)

    P3366 [模板]最小生成树 boruvka/sollin 复杂度$O(mlogn)$ 简要说明一下过程 引入一个数组$link[i]$表示连通块$i$下一步可更新的最短的边的编号 1.每次枚举所有 ...

  9. 洛谷P3366【模板】最小生成树-克鲁斯卡尔Kruskal算法详解附赠习题

    链接 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M&l ...

随机推荐

  1. LeetCode——Happy Number

    Description: Write an algorithm to determine if a number is "happy". A happy number is a n ...

  2. vux报错 this指针问题

    报错: 代码: 结果:取不到this.tishi,不明白为什么在请求内部会取不到这个值. 分析:this可能有问题 解决: 结果: 这样就能取到this.tishi的值了. 总结: methods:{ ...

  3. jQuery --- 利用a标签的download属性下载文件!

    最近遇到一个项目,需要有点击下载文件的功能. 由于文件格式是多种的,对于 rar / zip / rtf / doc / xlsx / jpg等. 点击下载有的是直接跳转到后进行下载,但有的是打开进行 ...

  4. 最舒适的路(并查集+枚举)(hdu1598)

    hdu1598 find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768 ...

  5. Linux系统下Nginx+PHP 环境安装配置

    一.编译安装Nginx 官网:http://wiki.nginx.org/Install 下载:http://nginx.org/en/download.html # tar -zvxf nginx- ...

  6. nginx集群配置

    一.nginx集群目标 以nginx作为代理服务器,分别在两台部署web站点的机器上面轮询访问. 3台机器IP地址分别为: 1)192.168.189.133   (nginx代理服务器) 2)192 ...

  7. javascript飞机大战-----005创建子弹对象2

    子弹销毁 /* 创建子弹:因为子弹不是只创建一个所以要用构造函数 注意一点:子弹发射的位置应该是英雄机的正中央的位置,所以需要传点东西进来 */ function Bullet(l,t){ this. ...

  8. 解决Ubuntu14.04下vi编辑器不能使用方向键和退格键问题

    参考:http://blog.sina.com.cn/s/blog_7d0c2fed01010zbi.html 系统:Ubuntu14.04 使用vi命令时,不能正常编辑文件,使用方向键时老是出现很多 ...

  9. Android USER 版本与ENG 版本的差异

    Android USER 版本与ENG 版本的差异 [Keyword] USER ENG user eng 用户版本 工程版本 差异 [Solution] Google 官方描述: USER/USER ...

  10. Linux eventfd分析

    2017-07-20 eventfd在linux中是一个较新的进程通信方式,和信号量等不同的是event不仅可以用于进程间的通信,还可以用户内核发信号给用户层的进程.eventfd在virtIO后端驱 ...