BZOJ1232: [Usaco2008Nov]安慰奶牛cheer(最小生成树)
题意:给一个图 需要找到一个子图使得所有点都连通
然后再选择一个点做为起点 走到每个点并回到起点
每条边,每个点被经过一次就要花费一次边权、点权
题解:肯定是找一颗最小生成树嘛
然后惊奇的发现 任意选一个点做为一个起点遍历的答案都是 每条边走两次
每个点度数是多少点权就统计几次 依题意起点多统计一次 那么起点就选一个点权最小的点
然后把每条边两个端点的点权赋给它 跑一个最小生成树
还是挺有意思的
#include <bits/stdc++.h>
using namespace std; int val[];
int vis[];
int pre[];
struct node
{
int u, v, w;
}E[]; bool cmp(node A, node B) {return A.w < B.w;} int find(int x)
{
if(x == pre[x]) return x;
else return pre[x] = find(pre[x]);
} int main()
{
int cnt = ;
int n, p;
scanf("%d%d", &n, &p); for(int i = ; i <= n; i++) pre[i] = i;
int ans = ;
int tmp = ;
for(int i = ; i <= n; i++) scanf("%d", &val[i]), tmp = min(tmp, val[i]);
ans += tmp; for(int i = ; i <= p; i++)
{
int a, b, c; scanf("%d%d%d", &a, &b, &c);
E[++cnt].u = a; E[cnt].v = b; E[cnt].w = c * + val[a] + val[b];
}
sort(E + , E + + cnt, cmp); int tot = ;
for(int i = ; i <= cnt; i++)
{
if(tot == n - ) break;
int ax = find(E[i].u);
int bx = find(E[i].v);
if(ax == bx) continue; tot++;
ans += E[i].w;
pre[ax] = bx;
}
printf("%d\n", ans);
return ;
}
BZOJ1232: [Usaco2008Nov]安慰奶牛cheer(最小生成树)的更多相关文章
- BZOJ1232: [Usaco2008Nov]安慰奶牛cheer
1232: [Usaco2008Nov]安慰奶牛cheer Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 578 Solved: 403[Submi ...
- 【最小生成树】Bzoj1232 [Usaco2008Nov]安慰奶牛cheer
Description Farmer John变得非常懒, 他不想再继续维护供奶牛之间供通行的道路. 道路被用来连接N (5 <= N <= 10,000)个牧场, 牧场被连续地编号为1. ...
- B1232 [Usaco2008Nov]安慰奶牛cheer 最小生成树
%%%小詹太巨啦!!!我就想直接最小生成树之后建树跑dfs,然后写跪了...然后看小詹博客之后恍然大悟,原来直接把边权改为w * 2 + 两边点权值就行了. 但是还是不对,为什么呢?原来我们起点走了三 ...
- [BZOJ1232][[Usaco2008Nov]安慰奶牛cheer(MST)
题目:http://hzwer.com/2493.html 分析:对于每条边,贡献的价值是这条边的边权加上这条边连接的两点的权值,所以可以把每条边的边权加上两顶点的点权作为新的边权,然后跑个最小生成树 ...
- 1232: [Usaco2008Nov]安慰奶牛cheer
1232: [Usaco2008Nov]安慰奶牛cheer Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 612 Solved: 431[Submi ...
- [bzoj1232][Usaco2008Nov]安慰奶牛cheer_Kruskal
安慰奶牛 cheer bzoj-1232 Usaco-2008 Nov 题目大意:给定一个n个点,m条边的无向图,点有点权,边有边权.FJ从一个点出发,每经过一个点就加上该点点权,每经历一条边就加上该 ...
- 【bzoj1232】[Usaco2008Nov]安慰奶牛cheer(最小生成树)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1232 这道题要保留的道路肯定是原图的一棵生成树,因为要保留n-1条边,且使删边后的图连 ...
- 【bzoj1232】[Usaco2008Nov]安慰奶牛cheer
问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路, ...
- BZOJ 1232 [Usaco2008Nov]安慰奶牛cheer:最小生成树【树上dfs性质】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1232 题意: 给你一个无向图,n个点,m条边. 每条边有边权len[i][j],每个点有点 ...
随机推荐
- 洛谷 - P2335 - 位图 - 简单dp
https://www.luogu.org/problemnew/show/P2335 假如我们使用dp的话,每次求出一个点的左上方.右上方.左下方.右下方的最近的白点的距离.那么只是n²的复杂度.这 ...
- PTA 模拟,【放着一定要写哈哈哈哈哈】(据说用string哟)
实现一种简单原始的文件相似度计算,即以两文件的公共词汇占总词汇的比例来定义相似度.为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3.且不超过10的英文单词,长度超过10的只考虑前10个 ...
- bzoj 4975: [Lydsy1708月赛]区间翻转【博弈论】
必败状态是倒序排列,也就是正序对为0 然后发现,每次翻转都是有奇数个数对(\( C_{4x+2}^{2} C_{4x+3}^{2} \) 都是奇数),所以每次翻转丢回改变正反数对的奇偶性 又因为偶数为 ...
- Ubuntu还是windows呢
本来想把才换不久的电脑也换成Ubuntu,犹豫再三,还是把这个老电脑作为Ubuntu的主力机把,毕竟大屏幕看着也得劲 新电脑还是win10吧,毕竟现在速度还是刷刷的,等过几年速度降下来了,就换成Ubu ...
- js 切割逗号
使用string对象的split()方法可以处理.例如:var yourString=“12,25,24,234,234,”;var result=yourString.split(",&q ...
- 2-zakoo使用
source:http://kazoo.readthedocs.io/en/latest/basic_usage.html 1 基本使用 1.1 连接处理 要使用zakoo,需要创建一个KazooCl ...
- Codeforces 1108F(克鲁斯卡尔的理解)
最小生成树会多样的情况是:两个或多个边等长且连通同样的两个并查集块. 所以可以跑一遍克鲁斯卡尔,每次把当前等长的边数出来,注意不要边找边并查,因为有一部分边是正常跑生成树我们也不会要他的,这种直接跳了 ...
- Codeforces Round #418 (Div. 2) B
Description Sengoku still remembers the mysterious "colourful meteoroids" she discovered w ...
- 双端队列 HDOJ 3530 Subsequence
题目传送门 题意:问最长子序列,满足区间最大值 - 最小值在[m, k]之间 分析:用双端队列维护最大值和最小值,保存的是位置.当满足条件时,更新最大值. /********************* ...
- 自定义view(13)自定义属性
1.添加attrs.xml文件 在android studio下,在res/values 下新建资源文件attrs.xml 2.添加自定义的属性 在attrs.xml中添加属性,如下.其中format ...