luogu p3366 最小生成树模板
倒腾了一个小时 自己也没去看网上的
总算自己能写出来模板了
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 最小生成树模板的更多相关文章
- 【原创】洛谷 LUOGU P3366 【模板】最小生成树
P3366 [模板]最小生成树 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N ...
- Luogu P3366 【模板】最小生成树
qwq #include<cstdio> #include<algorithm> using namespace std; ]; int n,m; struct abc { i ...
- 【luogu P3366 最小生成树】 模板
这里是kruskal做法 当然prim也可以,至于prim和kruskal的比较: Prim在稠密图中比Kruskal优,Kruskal在稀疏图中比Prim优. #include<bits/st ...
- 【luogu P3366 最小生成树】 题解 Prim
include include include include using namespace std; const int maxn = 505000; int n, m, dis[maxn], v ...
- 洛谷P3366 【模板】最小生成树 题解
题目链接:https://www.luogu.org/problem/P3366 最小生成树模板题. Kruskal算法 算法思想:给边按边权从小到大排序,然后遍历每一条边,如果边上的两个点不在同一个 ...
- 最小生成树 & 洛谷P3366【模板】最小生成树 & 洛谷P2820 局域网
嗯... 理解生成树的概念: 在一幅图中将所有n个点连接起来的n-1条边所形成的树. 最小生成树: 边权之和最小的生成树. 最小瓶颈生成树: 对于带权图,最大权值最小的生成树. 如何操作? 1.Pri ...
- 洛谷P3366 【模板】最小生成树
P3366 [模板]最小生成树 319通过 791提交 题目提供者HansBug 标签 难度普及- 提交 讨论 题解 最新讨论 里面没有要输出orz的测试点 如果你用Prim写了半天都是W- 题目 ...
- P3366 【模板】最小生成树(boruvka/sollin)
P3366 [模板]最小生成树 boruvka/sollin 复杂度$O(mlogn)$ 简要说明一下过程 引入一个数组$link[i]$表示连通块$i$下一步可更新的最短的边的编号 1.每次枚举所有 ...
- 洛谷P3366【模板】最小生成树-克鲁斯卡尔Kruskal算法详解附赠习题
链接 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M&l ...
随机推荐
- VScode之JavaScript Snippet Pack
一个片段包 使用例如: cl 回车或者tab键,就可以完整的打出console.log("") 还有很多快捷功能: 参考: https://marketplace.visualst ...
- Python 中的线程-进程2
原文:https://www.cnblogs.com/i-honey/p/7823587.html Python中实现多线程需要使用到 threading 库,其中每一个 Thread类 的实例控制一 ...
- 修改MySQL命令提示符
当前session可以直接用prompt修改 mysql> prompt \u@\h \d \r:\m:\s>PROMPT set to '\u@\h \d \r:\m:\s>'ro ...
- ElementUI select
https://blog.csdn.net/qq_33769914/article/details/81738278 https://blog.csdn.net/m0_37972557/article ...
- MVC视图布局页常用代码
1.在视图 Views 中新建文件夹 Shared 2.在 Shared 中新建布局页-母版页 _Layout.cshtml @{ Layout = null; } <!DOCTYPE h ...
- sql_q.format
field_q_insert = 'id, title, number, created,content'sql_q = 'INSERT INTO testquestion ({}) VALUES ( ...
- python设置redis过期时间
import time import redis if __name__ == "__main__": try: conn=redis.StrictRedis(host='192. ...
- 广通软件获“2016年度中国最具影响力IT运维管理软件提供商”殊荣
12月16日,“科技原力觉醒引领创新巅峰”-- 2016创新影响力年会暨国家产业服务平台•2016年终评活动在北京裕龙国际酒店落下帷幕. 本活动在主管部门的指导参与下,总结本年度技术成果并籍此对未来科 ...
- mysql 数据操作 单表查询 group by group_concat() 函数
# group_concat() 和concat() 一样拼接字符串 用在分组里 需求:查看每个职位都有哪些员工名字 把所有员工成员的名字都列出来 把每个职位里的员工姓名列出来 mysql> s ...
- xmr monero miner
https://github.com/fireice-uk/xmr-stak-cpu xmr-stak-cpu安装 xmr-stak-cpu是一个用于cpu计算的开源软件,下面记录在ubuntu17. ...