【并查集】【生成树】【APIO 2008】【bzoj 3624】免费道路
2015-08-31 21:44
573 查看
3624: [Apio2008]免费道路
[code]Time Limit: 2 Sec Memory Limit: 128 MBSec Special Judge Submit: 354 Solved: 159
Description
Input
Output
Sample Input
[code]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
[code]3 2 0 4 3 0 5 3 1 1 2 1
题解:
并查集。
其实是要求一种比较奇怪的生成树,首先先做一遍生成树,尽量加1类边,做完后得到的0类边就是这个生成树的必须要加的0类边,判断一下是否有解,然后做生成树,先加上这些必须加的0类边,然后再选0类边直到选完k条后再选1类边直到联通就好了。
Code:
[code]#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> using namespace std; #define N 20100 #define M 100100 struct Edge{ int u,v,p; }e[M],E ; int n,m,K,num=0,s[2],fa ; bool vis[M]={0}; int in(){ int x=0; char ch=getchar(); while (ch<'0' || ch>'9') ch=getchar(); while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar(); return x; } int find(int x){ if (fa[x]==x) return x; fa[x]=find(fa[x]); return fa[x]; } void init(){ s[0]=s[1]=0; for (int t=1; t>=0; t--){ for (int i=1; i<=m; i++) if (e[i].p==t){ int f1=find(e[i].u),f2=find(e[i].v); if (f1!=f2) fa[f1]=f2,vis[i]=1,s[t]++; } } } int main(){ n=in(),m=in(),K=in(); for (int i=1; i<=m; i++) e[i].u=in(),e[i].v=in(),e[i].p=in(); for (int i=1; i<=n; i++) fa[i]=i; init(); if (s[0]+s[1]!=n-1 || s[0]>K){ printf("no solution\n"); return 0; } s[0]=s[1]=0; for (int i=1; i<=n; i++) fa[i]=i; for (int i=1; i<=m; i++) if (!e[i].p && vis[i]){ int f1=find(e[i].u),f2=find(e[i].v); if (f1!=f2) fa[f1]=f2,s[0]++,E[++num]=e[i]; } for (int i=1; i<=m; i++) if (!e[i].p && s[0]<K){ int f1=find(e[i].u),f2=find(e[i].v); if (f1!=f2) fa[f1]=f2,s[0]++,E[++num]=e[i]; } for (int i=1; i<=m; i++) if (e[i].p){ int f1=find(e[i].u),f2=find(e[i].v); if (f1!=f2) fa[f1]=f2,s[1]++,E[++num]=e[i]; } if (s[0]<K){ printf("no solution\n"); return 0; } for (int i=1; i<=num; i++) printf("%d %d %d\n",E[i].u,E[i].v,E[i].p); return 0; }
相关文章推荐
- SQL Server 2012 未将对象引用设置到对象的实例。(SQLEditors)
- AXI总线简介
- 张三先唱一遍要表演的歌曲,老师觉得张三唱歌不过关,
- 前后台交互
- AFnetworking接收数据可变的问题!
- 分布式一致性原理—BASE
- HDOJ 4456 Crowd 离散化+二维树状数组
- 投资股权众筹项目,至少需要关注6个方面
- 【JS】测试:HTML页面引入另一个HTML页面,同名ID会冲突吗
- Hadoop学习笔记(十六)---HBase JAVA API
- PAT (Basic Level) Practise (中文) 1017. A除以B (20)
- 投资股权众筹项目,至少需要关注6个方面
- 惠普一周
- [笔记] 大家一起来测试,benchmark起来(MySQL下的TPC-C,TPC-H,TPC-W)
- 一个聊天界面
- 数组的引用于引用数组
- JavaSE增强之反射
- c++の文件读写
- Java多线程编程总结
- JavaScript根据文件名后缀判断是否图片文件