HDU-#4263 Red/Blue Spanning Tree(Kruskal)
来源:互联网 发布:linux tcpdump 用法 编辑:程序博客网 时间:2024/05/30 22:54
题目大意:给一个无向图的关系,该图由红色边和蓝色边两种构成,问能否恰好用k条蓝色边构成一颗MST?
解题思路:要判断是否存在,额可以转化为:先求一次构成的MST最少需要多少条蓝色边a,再求一次最多需要多少条的蓝色边b,然后判断k属不属于该[a,b]区间即可。又因为是统计蓝色边的数量,因此输入的时候将红色边的权值置为0,蓝色边的权值置为1。
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=4263
code:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 1000+10;int p[MAXN];int n,m,k,ans_a,ans_b;char ch[3];struct edge{ int u,v,w;}e[MAXN*MAXN];int cmp(const edge a,const edge b){return a.w<b.w;} //最小生成树的间接排序函数int recmp(const edge a,const edge b){return a.w>b.w;} //最大生成树的间接排序函数int find(int x){return x==p[x]?x:p[x]=find(p[x]);} //并查集find函数int Kruskal(bool flag){ //Kruskal算法 int ans=0; for(int i=1;i<=n;i++) p[i]=i; if(flag) sort(e+1,e+1+m,cmp); //蓝色的最小生成树排序 if(!flag) sort(e+1,e+1+m,recmp); //蓝色的最大生成树排序 for(int i=1;i<=m;i++){ int x=find(e[i].u); int y=find(e[i].v); if(x!=y){ p[x]=y; ans+=e[i].w; } } return ans;}int main(){ while(scanf("%d%d%d",&n,&m,&k)!=EOF && (n||m||k)){ for(int i=1;i<=m;i++){ scanf("%s%d%d",&ch,&e[i].u,&e[i].v); if(ch[0]=='R') e[i].w=0; //为红色全置为0 else e[i].w=1; //蓝色置为1,这样的计数就是蓝色边的数量 } ans_a=Kruskal(true); //计算最少用蓝色边的个数 ans_b=Kruskal(false); //计算最多用蓝色边的个数 if(k<=ans_b&& k>=ans_a) printf("1\n"); else printf("0\n"); } return 0;}
0 0
- [HDU 4263]Red/Blue Spanning Tree[kruskal]
- HDU-#4263 Red/Blue Spanning Tree(Kruskal)
- hdu 4263 Red/Blue Spanning Tree
- hdu 4263 Red/Blue Spanning Tree
- HDU 4263 Red/Blue Spanning Tree(最小生成树)
- HDU 4263(Red/Blue Spanning Tree-取边贪心)
- 并查集-- HDU - 4263 Red/Blue Spanning Tree
- hdu4263 Red/Blue Spanning Tree
- hdu4263 Red/Blue Spanning Tree
- Red/Blue Spanning Tree----HDU_4263----并查集and生成树
- 最小生成树(Minimum Spanning Tree)(Kruskal算法)
- HDOJ 题目4408 Minimum Spanning Tree(Kruskal+Matrix_Tree)
- [agc14e]Blue and Red Tree
- Kruskal Algorithm for Minimum Spanning Tree
- MST(Kruskal’s Minimum Spanning Tree Algorithm)
- Kruskal’s Minimum Spanning Tree Algorithm
- HDU 4408 Minimum Spanning Tree (图的最小生成树计数 Kruskal + Matrix_Tree定理)
- HDU-4408-Minimum Spanning Tree
- 解决“您尝试打开的文件*.xls的格式与文件扩展名指定的格式不一致”
- poj-1703 Find them, Catch them!! 并查集
- Java获取项目中的路径
- uitableview
- PXE-E53:NO boot filename received解决办法
- HDU-#4263 Red/Blue Spanning Tree(Kruskal)
- mantis 流程页面反映慢
- 程序锁
- c练习题1:求最大公约数,最小公倍数
- srand ()与rand()函数小应用之猜数游戏
- Spring2.5.6的注入讲解
- Selenium WebDriver操作ligerui记录
- dijkstra_最短路径_hdu_3790
- poj 3844