bzoj 3624: [Apio2008]免费道路 生成树的构造
3624: [Apio2008]免费道路
Time Limit: 2 Sec Memory Limit: 128 MBSec Special Judge
Submit: 111 Solved: 49
[Submit][Status]
Description

Input

Output

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<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define MAXN 1000010
struct edge
{
int x,y;
};
vector<edge> v0,v1;
bool vis0[MAXN],vis1[MAXN];
int uf[MAXN];
int get_fa(int now)
{
return (uf[now]==now)?now:uf[now]=get_fa(uf[now]);
}
bool comb(int x,int y)
{
x=get_fa(x);
y=get_fa(y);
if (x==y)return ;
uf[x]=y;
return ;
}
int main()
{
freopen("input.txt","r",stdin);
int n,m,i,j,k,x,y,z;
int cnt=;;
int tot=;
scanf("%d%d%d",&n,&m,&k);
edge et;
for (i=;i<=n;i++)
uf[i]=i;
for (i=;i<m;i++)
{
scanf("%d%d%d",&et.x,&et.y,&z);
if (z)
v1.push_back(et);
else
v0.push_back(et);
}
for (i=;i<v1.size();i++)
{
comb(v1[i].x,v1[i].y);
}
for (i=;i<v0.size();i++)
{
vis0[i]=comb(v0[i].x,v0[i].y);
cnt+=vis0[i];
}
if (cnt>k)
{
printf("no sulotion\n");
return ;
}
for (i=;i<=n;i++)
uf[i]=i;
for (i=;i<v0.size();i++)
{
if (vis0[i])
comb(v0[i].x,v0[i].y);
}
for (i=;i<v0.size();i++)
{
if (cnt==k)break;
if (vis0[i])continue;
vis0[i]=comb(v0[i].x,v0[i].y);
cnt+=vis0[i];
}
for (i=;i<v1.size();i++)
{
vis1[i]=comb(v1[i].x,v1[i].y);
}
for (i=;i<v0.size();i++)
if (vis0[i])
tot++;
for (i=;i<v1.size();i++)
if (vis1[i])
tot++;
if (cnt!=k || tot!=n-)
{
printf("no solution\n");
return ;
}
for (i=;i<v0.size();i++)
if (vis0[i])
printf("%d %d %d\n",v0[i].x,v0[i].y,);
for (i=;i<v1.size();i++)
if (vis1[i])
printf("%d %d %d\n",v1[i].x,v1[i].y,);
}
bzoj 3624: [Apio2008]免费道路 生成树的构造的更多相关文章
- BZOJ 3624: [Apio2008]免费道路 [生成树 并查集]
题意: 一张图0,1两种边,构造一个恰有k条0边的生成树 优先选择1边构造生成树,看看0边是否小于k 然后保留这些0边,补齐k条,再加1边一定能构成生成树 类似kruskal的证明 #include ...
- 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]免费道路【生成树+贪心】
先把水泥路建生成树,然后加鹅卵石路,这里加的鹅卵石路是一定要用的(连接各个联通块),然后初始化并查集,先把必需的鹅卵石路加进去,然后随便加鹅卵石路直到k条,然后加水泥路即可. 注意判断无解 #incl ...
- Bzoj 3624: [Apio2008]免费道路 (贪心+生成树)
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 这 ...
- BZOJ.3624.[APIO2008]免费道路(Kruskal)
题目链接 我们发现有些白边是必须加的,有些是多余的. 那么我们先把所有黑边加进去,然后把必须要加的白边找出来. 然后Kruskal,把必须要加的白边先加进去,小于K的话再加能加的白边.然后加黑边. 要 ...
- [APIO2008]免费道路(生成树)
新亚(New Asia)王国有 N 个村庄,由 M 条道路连接.其中一些道路是鹅卵石路,而其它道路是水泥路.保持道路免费运行需要一大笔费用,并且看上去 王国不可能保持所有道路免费.为此亟待制定一个新的 ...
- 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: ...
随机推荐
- eclipse中svn插件的安装
Svn(Subversion)是近年来崛起的版本管理工具,在当前的开源项目里(J2EE),几乎95%以上的项目都用到了SVN.Subversion项目的初衷是为了替换当年开源社区最为流行的版本控制软件 ...
- JSON 学习总结 <一>:什么是JSON
JSON的相关资料和博客很多,JSON无处不用,最近项目中一直要用到JSON,今天没有加班,就写下,算是对自己的总结,对JSON又一次深入的认识. 废话不多了,直接进入今天的主题: 如题:今天就介绍下 ...
- android中sharedPreferences的笔记
haredPreferences的使用非常简单,能够轻松的存放数据和读取数据.SharedPreferences只能保存简单类型的数据,例如,String.int等.一般会将复杂类型的数据转换成Bas ...
- How to hanganalyze and systemstate dumps
Oracle support request hang analysis and system state dumps when rasing SR. One 10.1 or higher versi ...
- LLDB中的小技巧
1.打印视图层次结构 po [self.view recursiveDescription] 2.临时调整界面UI 比如说现在你需要改变一个控件的背景色来更好的查看布局的问题,这是就不需 ...
- pl/sql编程
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- 从零开始 WIN8.1 下Android 开发环境搭建
一.JDK安装 当前最新版本是JDK8.0 地址http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21331 ...
- JS实时监听浏览器宽度的变化
boot:function(){ //加载页面时执行一次 changeMargin(); //监听浏览器宽度的改变 window.onresize = function(){ changeMargin ...
- Python:列表
#!/usr/bin/python3 #列表 是可变的,可修改的 listDemo = ["one","two","three"," ...
- Codevs 1065 01字符串
1065 01字符串 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 输出仅有0和1组成的长度为n的字符串,并且其中不能含有 ...