Bzoj 3624: [Apio2008]免费道路 (贪心+生成树)



Sample Input
1 3 0
4 5 1
3 2 0
5 3 1
4 3 0
1 2 1
4 2 1
Sample Output
4 3 0
5 3 1
1 2 1
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
#include <map>
#define N 20005
#define M 100005
using namespace std;
int n,m,t,fa[N];
struct ro
{
int to,from,l;
bool bj;
}road[M];
bool px1(ro a,ro b)
{
return a.l>b.l;
}
bool px2(ro a,ro b)
{
return a.l<b.l;
}
int find(int x)
{
if(fa[x]==x)return x;
return fa[x]=find(fa[x]);
}
void hb(int x,int y)
{
int a=find(x),b=find(y);
fa[a]=b;
}
int ans[N];
int main()
{
scanf("%d%d%d",&n,&m,&t);
int sum=;
for(int i=;i<=n;i++)fa[i]=i;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&road[i].from,&road[i].to,&road[i].l);
if(!road[i].l)sum++;
}
sort(road+,road++m,px1);
int js1=,js2=;
for(int i=;i<=m;i++)
{
int x=road[i].from,y=road[i].to;
if(find(x)!=find(y))
{
js1++;
if(!road[i].l)
{
road[i].bj=;
js2++;
}
hb(x,y);
}
if(js1==n-)break;
}
if(js1!=n-||js2>t)
{
printf("no solution\n");
exit();
}
sort(road+,road++m,px2);
js1=,js2=;
for(int i=;i<=n;i++)fa[i]=i;
for(int i=;i<=sum;i++)
{
if(road[i].bj)
{
int x=road[i].from,y=road[i].to;
hb(x,y);
js2++;
js1++;
ans[js1]=i;
}
}
for(int i=;i<=m;i++)
{
int x=road[i].from,y=road[i].to;
if(find(x)!=find(y))
{
if(!road[i].l)
{
js2++;
}
js1++;
ans[js1]=i;
hb(x,y);
}
if(js2==t)i=sum,js2=-;
}
if(js2!=-)
{
printf("no solution\n");
exit();
}
for(int i=;i<=n-;i++)
{
printf("%d %d %d\n",road[ans[i]].from,road[ans[i]].to,road[ans[i]].l);
}
return ;
}
Bzoj 3624: [Apio2008]免费道路 (贪心+生成树)的更多相关文章
- bzoj 3624: [Apio2008]免费道路【生成树+贪心】
先把水泥路建生成树,然后加鹅卵石路,这里加的鹅卵石路是一定要用的(连接各个联通块),然后初始化并查集,先把必需的鹅卵石路加进去,然后随便加鹅卵石路直到k条,然后加水泥路即可. 注意判断无解 #incl ...
- 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: ...
- BZOJ 3624 [Apio2008]免费道路:并查集 + 生成树 + 贪心【恰有k条特殊路径】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3624 题意: 给你一个无向图,n个点,m条边. 有两种边,种类分别用0和1表示. 让你求一 ...
- BZOJ 3624: [Apio2008]免费道路 [生成树 并查集]
题意: 一张图0,1两种边,构造一个恰有k条0边的生成树 优先选择1边构造生成树,看看0边是否小于k 然后保留这些0边,补齐k条,再加1边一定能构成生成树 类似kruskal的证明 #include ...
- BZOJ.3624.[APIO2008]免费道路(Kruskal)
题目链接 我们发现有些白边是必须加的,有些是多余的. 那么我们先把所有黑边加进去,然后把必须要加的白边找出来. 然后Kruskal,把必须要加的白边先加进去,小于K的话再加能加的白边.然后加黑边. 要 ...
- 3624: [Apio2008]免费道路
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 ...
- [Apio2008]免费道路[Kruscal]
3624: [Apio2008]免费道路 Time Limit: 2 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1292 Solved: ...
- P3623 [APIO2008]免费道路
3624: [Apio2008]免费道路 Time Limit: 2 Sec Memory Limit: 128 MBSec Special Judge Submit: 2143 Solved: 88 ...
随机推荐
- C#原子性运算 interlocked.compareExchanged
缘起: 假设有一个类myClass, myclass里有一个count属性. 在多线程的环境下 每个线程中 直接使用count++, 如果两个线程并行执行时, 两个线程中的一个的结果会被覆掉, 非线 ...
- Wow6432Node
64 位版本 Windows 中的注册表分为 32 位注册表项和 64 位注册表项.许多 32 位注册表项与其相应的 64 位注册表项同名,反之亦然. 64 位版本 Windows 包含的默认 64 ...
- oracle,sql server count函数 存储过程 判断 行数 注意事项
oralce中使用 count 函数判断 行数 需要注意 一定是count 有值的字段,接下来看一组语句 --查询数据 select * from kk_create_ka where auto_id ...
- canvas——粒子系统(1)
这个动画在很早之前就见过,当时就没迷住了.最近在学canavs动画,动手实现了一下.代码在这里.展示效果在这里. 这属于粒子系统的一种,粒子系统就是需要管理一堆粒子嘛,动画实现的关键在于,遍历这些粒子 ...
- 零元学Expression Blend 4 - Chapter 18 用实例了解互动控制项「CheckBox」II
原文:零元学Expression Blend 4 - Chapter 18 用实例了解互动控制项「CheckBox」II 延续上一章的CheckBox教学,本章将以实作继续延伸更灵活的运用CheckB ...
- Linux ADF(Atomic Display Framework)浅析---概述
概述 因为工作关系,最近有涉及到ADF(Atomic Display Framework)相关的内容,部分内容来自互联网 ADF(Atomic Display Framework)是Google新增的 ...
- python列表的内置方法
list数据类型还有更多的方法.这里是list对象的所有方法: list.append(x) 添加一个元素到列表的末尾:相当于a[len(a):] = [x]. list.extend(L) 将指定列 ...
- 8天入门docker系列 —— 第六天 搭建自己的私有镜像仓库Registry
这一篇我们来聊聊私有仓库的搭建,其实不管你是通过docker build还是compose的方式进行构建,最终还是要将生成好的镜像push到远程的仓库中,这样多个 平台可以方便的获取你registry ...
- JVM史上最全实践优化没有之一
JVM史上最全优化没有之一 1.jvm的运行参数 1.1 三种参数类型 1.1.1 -server与-clinet参数 2.1 -X参数 2.1.1 -Xint.-Xcomp.-Xmixed 3.1 ...
- CSS3常用转换总结
一.2D转换 translate(npx,npx) 相对当前元素位置移动 /* 实现div向左移动50个像素,并向下移动100个像素 */ div { transform: translate(50p ...