2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic(Kruskal思想)
2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic
题意:有一张图,第i个点被占领需要ai个兵,而每个兵传送至该点需要bi的费用。占领第i条边需要其两端点的兵数之和大等于ci。对于已占领的点或边可以免费通行。因此兵达到一个点的手段有传送和沿路走。图上的兵可以在已占领的点、边随意调度。
求占领所有点的最小花费。
思路:将边按ci进行升序排列,对于每条边两端点所在的连通块进行合并,合并细节见代码。这里有一点值得思考:当你想打通当前这条边时,由于排了序,你总可以默认之前那些ci小的边已打通(因为兵可以调度)。因此,我们需要用并查集维护连通块,以及每个连通块中最小的传送单价,最大的单点兵需求量,来更新花费。
#include<iostream>
#include<cstdio>
#include<algorithm>
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<ll,pair<int,int> > P;
const int maxn=3e5+10;
P edge[maxn];
int fa[maxn];
ll a[maxn],b[maxn],cost[maxn];
void init(int n)
{
for (int i=1;i<=n;++i)
{
fa[i]=i;
cost[i]=a[i]*b[i];
}
}
int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
}
void unio(int x,int y,ll c)
{
int fx=find(x),fy=find(y);
if (fx==fy)
return;
fa[fx]=fy;
a[fy]=max(c,max(a[fy],a[fx]));
b[fy]=min(b[fy],b[fx]);
cost[fy]=min(cost[fy]+cost[fx],a[fy]*b[fy]);
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for (int i=1;i<=n;++i)
scanf("%lld%lld",&a[i],&b[i]);
for (int i=0;i<m;++i)
scanf("%d%d%lld",&edge[i].se.fi,&edge[i].se.se,&edge[i].fi);
sort(edge,edge+m);
init(n);
for (int i=0;i<m;++i)
{
int u=edge[i].se.fi,v=edge[i].se.se,c=edge[i].fi;
unio(u,v,c);
}
ll ans=0;
for (int i=1;i<=n;++i)
if (fa[i]==i)
ans+=cost[i];
printf("%lld",ans);
return 0;
}
2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic(Kruskal思想)的更多相关文章
- 2016-2017 ACM-ICPC, NEERC, Moscow Subregional Contest
A. Altitude 从小到大加入每个数,用set查找前驱和后继即可. 时间复杂度$O(n\log n)$. #include <bits/stdc++.h> using namespa ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem K. KMC Attacks 交互题 暴力
Problem K. KMC Attacks 题目连接: http://codeforces.com/gym/100714 Description Warrant VI is a remote pla ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem D. Distance 迪杰斯特拉
Problem D. Distance 题目连接: http://codeforces.com/gym/100714 Description In a large city a cellular ne ...
- 2014-2015 ACM-ICPC, NEERC, Moscow Subregional Contest E. Equal Digits
E. Equal Digits time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- 2014-2015 ACM-ICPC, NEERC, Moscow Subregional Contest A. Advanced 2048
A. Advanced 2048 time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- [Gym]2008-2009 ACM-ICPC, NEERC, Moscow Subregional Contest
比赛链接:http://codeforces.com/gym/100861 A模拟,注意两个特殊的缩写. #include <bits/stdc++.h> using namespace ...
- 2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest
A. Advertising Strategy 最优策略一定是第一天用$y$元,最后一天再用$x-y$元补满. 枚举所有可能的$y$,然后模拟即可,天数为$O(\log n)$级别. 时间复杂度$O( ...
- 2015-2016 ACM-ICPC, NEERC, Moscow Subregional Contest J - Jealousy
题意:有n张照片,每张照片上有一些妹子,要按照片顺序给妹纸安排男朋友,如果妹纸i安排的男朋友之前有女朋友,那么费用+wi,求总费用最小,和输出路径 题解:费用流,先把照片天数建点i连i+1,流量k(最 ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem F. Finance 模拟题
Problem F. Finance 题目连接: http://codeforces.com/gym/100714 Description The Big Boss Company (BBC) pri ...
随机推荐
- Python 异常处理与反射机制
Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...
- MyBatis 示例-主键回填
测试类:com.yjw.demo.PrimaryKeyTest 自增长列 数据库表的主键为自增长列,在写业务代码的时候,经常需要在表中新增一条数据后,能获得这条数据的主键 ID,MyBatis 提供了 ...
- C#数字前补0
[TestMethod] public void Test8() { ; string b = string.Format("{0:000000}", a); , '); }
- SqlServer2008 R2发布订阅
网上好多大神写的贴子,自己也看着贴子弄的,写的已经很详细了,我就不重复写了,贴上参考资料: http://www.cnblogs.com/dudu/archive/2010/08/26/1808540 ...
- python+django学习一
pycharm破解地址:https://blog.csdn.net/qq_32811489/article/details/78636049 按照视频写代码,记录关键的地方方便自己记忆, 视频教程地址 ...
- react开发vscode插件推荐
原文地址:https://github.com/xieqingtian/blog/issues/2 由于本人主要是做react开发,用的代码编辑器是传说中的宇宙第一前端神器vscode, 所以在这里记 ...
- 为Vim 添加vimgdb支持
为Vim 添加vimgdb支持 1. 下载最新的vim74的源码包 wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2 2.下载vimgdb- ...
- 4. Java入门程序
以eclipse为例,建立一个简单的Java程序. 首先启动eclipse,进入到如下主页面: 新建一个项目,选择“File-New-Java Project”: 弹出了一个如下页面,假设命名为Tes ...
- ES6入门十一:Generator生成器、async+await、Promisify
生成器的基本使用 生成器 + Promise async+await Promise化之Promisify工具方法 一.生成器的基本使用 在介绍生成器的使用之前,可以简单理解生成器实质上生成的就是一个 ...
- 使用私有api统计ios app运行时间及次数
利用<iphone SprintBoard部分私有API总结>中提到的私有API,可以做很多越狱以前实现不了的事情. 比如,利用一个后台运行的app,监控该iphone上所有app的运行次 ...