P3623 [APIO2008]免费道路
3624: [Apio2008]免费道路
Time Limit: 2 Sec Memory Limit: 128 MBSec Special Judge
Submit: 2143 Solved: 881
[Submit][Status][Discuss]
Description

Input

Output

Sample Input
5 7 2
1 3 0
4 5 1
3 2 0
5 3 1
4 3 0
1 2 1
4 2 1
Sample Output
3 2 0
4 3 0
5 3 1
1 2 1
先预处理全用水泥路能做到的联通状态
然后处理必须选那些鹅卵石道路才能生成树,这些边标记选择
再随便加有联通贡献鹅卵石路加到k条即可
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define LL long long
using namespace std;
int i,m,n,j,k,x,y,z,f[100001],c1,c2,bl[500001],cnt1,cnt2;
struct vv
{
int x,y;
} b[500001],w[500001];
int find(int x)
{
if(f[x]==x) return x;
f[x]=find(f[x]);
return f[x];
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=n;i++) f[i]=i;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
if(z) { c1+=1; b[c1].x=x, b[c1].y=y;}
else {c2+=1; w[c2].x=x; w[c2].y=y;}
}
if(c2<k) {printf("no solution\n"); return 0;}
for(i=1;i<=c1;i++) if(find(b[i].x)!=find(b[i].y)) f[f[b[i].x]]=f[b[i].y], cnt1+=1;
if(cnt1<n-1-k) {printf("no solution\n"); return 0;}
for(i=1;i<=c2;i++) if(find(w[i].x)!=find(w[i].y)) bl[i]=1, f[f[w[i].x]]=f[w[i].y], cnt2+=1;
if(cnt1+cnt2!=n-1) {printf("no solution\n"); return 0;}
for(i=1;i<=n;i++) f[i]=i; k-=cnt2;
for(i=1;i<=c2;i++)
if(bl[i]) f[find(w[i].x)]=find(w[i].y);
else if(k && find(w[i].x)!=find(w[i].y)) bl[i]=1, f[f[w[i].x]]=f[w[i].y], k-=1;
if(k) {printf("no solution\n"); return 0;}
for(i=1;i<=c1;i++)
if(find(b[i].x)!=find(b[i].y))
{
printf("%d %d 1\n",b[i].x, b[i].y);
f[f[b[i].x]]=f[b[i].y];
}
for(i=1;i<=c2;i++) if(bl[i]) printf("%d %d 0\n",w[i].x,w[i].y);
}
P3623 [APIO2008]免费道路的更多相关文章
- 题解 Luogu P3623 [APIO2008]免费道路
[APIO2008]免费道路 题目描述 新亚(New Asia)王国有 N 个村庄,由 M 条道路连接.其中一些道路是鹅卵石路,而其它道路是水泥路.保持道路免费运行需要一大笔费用,并且看上去 王国不可 ...
- 【luogu P3623 [APIO2008]免费道路】 题解
题目链接:https://www.luogu.org/problemnew/show/P3623 说是对克鲁斯卡尔的透彻性理解 正解: 先考虑加入水泥路,然后再考虑加入剩下必须要加入的最少鹅卵石路. ...
- [火星补锅] 水题大战Vol.2 T2 && luogu P3623 [APIO2008]免费道路 题解
前言: 如果我自己写的话,或许能想出来正解,但是多半会因为整不出正确性而弃掉. 解析: 这题算是对Kruskal的熟练运用吧. 要求一颗生成树.也就是说,最后的边数是确定的. 首先我们容易想到一个策略 ...
- [BZOJ3624][Apio2008]免费道路
[BZOJ3624][Apio2008]免费道路 试题描述 输入 输出 输入示例 输出示例 数据规模及约定 见“输入”. 题解 第一步,先尽量加入 c = 1 的边,若未形成一个连通块,则得到必须加入 ...
- bzoj 3624: [Apio2008]免费道路 生成树的构造
3624: [Apio2008]免费道路 Time Limit: 2 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 111 Solved: 4 ...
- BZOJ 3624: [Apio2008]免费道路
3624: [Apio2008]免费道路 Time Limit: 2 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1201 Solved: ...
- [Apio2008]免费道路[Kruscal]
3624: [Apio2008]免费道路 Time Limit: 2 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1292 Solved: ...
- Kruskal算法及其类似原理的应用——【BZOJ 3654】tree&&【BZOJ 3624】[Apio2008]免费道路
首先让我们来介绍Krukal算法,他是一种用来求解最小生成树问题的算法,首先把边按边权排序,然后贪心得从最小开始往大里取,只要那个边的两端点暂时还没有在一个联通块里,我们就把他相连,只要这个图里存在最 ...
- [APIO2008]免费道路
[APIO2008]免费道路 BZOJ luogu 先把必须连的鹅卵石路连上,大于k条no solution 什么样的鹅卵石路(u,v)必须连?所有水泥路都连上仍然不能使u,v连通的必须连 补全到k条 ...
随机推荐
- plupload如何删除一条数据
FilesRemoved用了发现不成功,删除图片这么重要怎能如此 看到老外提的另一个问题发现这个问题解决办法,特此备注以供不会的童鞋参考 uploader.bind('FilesAdded', fun ...
- C#设计模式--代理模式(学习Learning hard 设计模式笔记)
class Program { static void Main(string[] args) { //创建一个代理对象 并发出请求 Person proxy = new Friend(); prox ...
- c#设计模式·结构型模式
看的过程中,发现好多模式都用过,只是没有总结,或者是不知道叫这个名字吧··· 这里列举结构型模式,适配器.桥接.过滤.组合.装饰器.外观.享元.代理, 适配器模式:将现存的对象放到新的环境里边去,但是 ...
- JSON.stringify时间的问题
使用Element UI控件el-date-picker后台传值用到JSON.stringify转换字符串传后台发现输出国际标准时间(ISO),减少了8个小时, 解决方式: 由于JSON.string ...
- android调试debug快捷键
1. [Ctrl+Shift+B]:在当前行设置断点或取消设置的断点. 2. [F11]:调试最后一次执行的程序. 3. [Ctrl+F11]:运行最后一次执行的程序. 4. ...
- 2Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
public class TestException { public static void main(String[] args) { String str = "1"; fo ...
- mvc5中重命名项目的名称后,出现"找到多个与名为“Home”的控制器匹配的类型"
1.已把项目中所有的Webapplication1改为了MvcMovie,但是运行后,还是报错: 找到多个与名为“Home”的控制器匹配的类型 2.已重新生成解决方安,还是不行. 解决方法:把bin文 ...
- ORACLE数据泵还原(IMPDP命令)
Oracle数据库还原IMPDP命令是相对于EXPDP命令的,方向是反向的.即对于数据库备份进行还原操作.一.知晓IMPDP命令 C:\>impdp -help Import: Release ...
- 模板与STL学习简单的笔记
一.如何进行泛型编程 C/C++是一种静态编程语言,必须需要把代码翻译成可执行的二进制可执行程序然后再运行,一旦编译好之后就不能再变了(数据类型也就必须确定下无法更改,因此要为每一种数据类型编写一份算 ...
- Docker 报错 error during connect: Get pipe/docker_engine: The system cannot find the file specified. - 摘要: 本文讲的是Docker 报错 error during connect: Get pipe/dock
error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.37/version: open //./pipe/docker_ ...