bzoj 3624: [Apio2008]免费道路【生成树+贪心】
先把水泥路建生成树,然后加鹅卵石路,这里加的鹅卵石路是一定要用的(连接各个联通块),然后初始化并查集,先把必需的鹅卵石路加进去,然后随便加鹅卵石路直到k条,然后加水泥路即可。
注意判断无解
#include<iostream>
#include<cstdio>
using namespace std;
const int N=20005,M=100005;
int n,m,k,f[N],ta,tb,con;
bool v[M];
struct qwe
{
	int u,v;
	qwe(int U=0,int V=0)
	{
		u=U,v=V;
	}
}a[M],b[M],ans[N];
int read()
{
	int r=0,f=1;
	char p=getchar();
	while(p>'9'||p<'0')
	{
		if(p=='-')
			f=-1;
		p=getchar();
	}
	while(p>='0'&&p<='9')
	{
		r=r*10+p-48;
		p=getchar();
	}
	return r*f;
}
int zhao(int x)
{
	return f[x]==x?x:f[x]=zhao(f[x]);
}
int main()
{
	n=read(),m=read(),k=read();
	for(int i=1;i<=m;i++)
	{
		int x=read(),y=read(),z=read();
		if(z)
			a[++ta]=qwe(x,y);
		else
			b[++tb]=qwe(x,y);
	}
	if(tb<k)
	{
		printf("no solution\n");
		return 0;
	}
	for(int i=1;i<=n;i++)
		f[i]=i;
	for(int i=1;i<=ta;i++)
	{
		int fu=zhao(a[i].u),fv=zhao(a[i].v);
		if(fu!=fv)
			f[fu]=fv;
	}
	for(int i=1;i<=tb;i++)
	{
		int fu=zhao(b[i].u),fv=zhao(b[i].v);
		if(fu!=fv)
			f[fu]=fv,v[i]=1,k--;
	}
	if(k<0)
	{
		printf("no solution\n");
		return 0;
	}
	for(int i=1;i<=n;i++)
		f[i]=i;
	for(int i=1;i<=tb;i++)
		if(v[i])
		{
			f[zhao(b[i].u)]=zhao(b[i].v);
			ans[++con]=qwe(b[i].u,b[i].v);
		}
	for(int i=1;i<=tb&&k;i++)
	{
		int fu=zhao(b[i].u),fv=zhao(b[i].v);
		if(fu!=fv)
		{
			f[fu]=fv,k--;
			ans[++con]=qwe(b[i].u,b[i].v);
		}
	}
	if(k)
	{
		printf("no solution\n");
		return 0;
	}
	for(int i=1;i<=con;i++)
		printf("%d %d 0\n",ans[i].u,ans[i].v);
	for(int i=1;i<=ta;i++)
	{
		int fu=zhao(a[i].u),fv=zhao(a[i].v);
		if(fu!=fv)
		{
			f[fu]=fv;
			printf("%d %d 1\n",a[i].u,a[i].v);
		}
	}
	return 0;
}
bzoj 3624: [Apio2008]免费道路【生成树+贪心】的更多相关文章
- bzoj 3624: [Apio2008]免费道路 生成树的构造
		3624: [Apio2008]免费道路 Time Limit: 2 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 111 Solved: 4 ... 
- 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]免费道路 [生成树 并查集]
		题意: 一张图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]免费道路(Kruskal)
		题目链接 我们发现有些白边是必须加的,有些是多余的. 那么我们先把所有黑边加进去,然后把必须要加的白边找出来. 然后Kruskal,把必须要加的白边先加进去,小于K的话再加能加的白边.然后加黑边. 要 ... 
- 【BZOJ3624】【APIO2008】免费道路 [生成树][贪心]
		免费道路 Time Limit: 2 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Input Output Sampl ... 
- [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 ... 
随机推荐
- Java有几种线程池?
			Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程newFixed ... 
- iOS 自动识别URL(链接)功能的实现
			功能需求 在做“沃迪康”聊天功能时,甲方要求发送的网址要自动识别.并点击能自动跳转 功能难点 在实现过程中,所有的文字都是动态获取的,设置富文本属性时,不能按照常规的方法 解决方式 如果只是文字, ... 
- kis
			http://5.xp510.com:801/xp2011/%E9%87%91%E8%9D%B6kis%E4%B8%93%E4%B8%9A%E7%89%88.rar 
- Windows平台下Git(gitblit)服务器搭建
			环境:Windows 10 专业版32位 因为公司服务器上已经搭了Visual SVN等,只好在Windows上搭个Git Server给大家用. 参考链接:http://www.cnblogs.co ... 
- Linux 网络工具
			1 nethogs nethogs 是一个免费的工具,当要查找哪个 PID (注:即 process identifier,进程 ID) 给你的网络流量带来了麻烦时,它是非常方便的.它按每个进程来分组 ... 
- 提示:“请检查浏览器代理设置”/xx-net
			1.删除已导入的证书文件(运行certmgr.msc和certlm.msc,然后自己找到xxnet删),2.更新3.3.1(或是自己找到那行代码取消注释,楼下有人提及)3.删除data文件夹(下的ce ... 
- 【C#】无损转换Image为Icon   【C#】组件发布:MessageTip,轻快型消息提示窗  【C#】给无窗口的进程发送消息  【手记】WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体 【手记】调用Process.EnterDebugMode引发异常:并非所有引用的特权或组都分配给呼叫方  【C#】DataRowState演变备忘
			[C#]无损转换Image为Icon 如题,市面上常见的方法是: var handle = bmp.GetHicon(); //得到图标句柄 return Icon.FromHandle(handle ... 
- woodcut
			http://www.lintcode.com/en/problem/wood-cut/# 二分答案,贪心验证,具有单调性 class Solution { public: /** *@param L ... 
- POJ1195 Mobile phones 【二维树状数组】
			Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 14288 Accepted: 6642 De ... 
- 网络知识: 物理层PHY 和 网络层MAC
			PHY模块简介 物理层位于OSI最底层,物理层协议定义电气信号.线的状态.时钟要求.数据编码和数据传输用的连接器. 物理层的器件称为PHY. 上图里的灰色方框图里的就是PHY芯片内部模块图. MAC器 ... 
