[FZYZOJ 1283] [NOIP福建夏令营] 修复公路
2015-06-13 10:33
218 查看
P1283 -- [NOIP福建夏令营]修复公路
时间限制:1000MS内存限制:131072KBDescription
A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车。政府派人修复这些公路。给出A地区的村庄数N,和公路数M,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路)
Input Format
第1行两个正整数N,M(N<=1000,M<=100000)下面M行,每行3个正整数x, y, t,告诉你这条公路连着x,y两个村庄,在时间t时能修复完成这条公路。(x<=N,y<=N,t<=100000)
Output Format
如果全部公路修复完毕仍然存在两个村庄无法通车,则输出-1,否则输出最早什么时候任意两个村庄能够通车。Sample Input
4 4 1 2 6 1 3 4 1 4 5 4 2 3
Sample Output
5
Hint
【题解】类似于BZOJ1083,最小生成树边的最大值。#include<bits/stdc++.h> using namespace std; char B[1<<15],*S=B,*T=B; #define getchar() (S==T&&(T=(S=B)+fread(B,1,1<<15,stdin),S==T)?0:*S++) inline int read() { int x=0,f=1;char ch; ch=getchar(); while(ch>'9'||ch<'0') {if(ch=='-') f=-1; ch=getchar();} while(ch<='9'&&ch>='0') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();} return x*f; } struct edge { int a,b,w; }e[300010]; int cmp(const void *a, const void *b) { struct edge *c= (struct edge*) a; struct edge *d= (struct edge*) b; return c->w-d->w; } int n,m,pre[1001]; int getf(int x) { int r=x; while(pre[r]!=r) r=pre[r]; int i=x,j; while(i!=r) { j=pre[i]; pre[i]=r; i=j; } return r; } int main() { int ans,cnt=0; n=read();m=read(); for (int i=1;i<=n;++i) pre[i]=i; for (int i=1;i<=m;++i) e[i].a=read(),e[i].b=read(),e[i].w=read(); qsort(e+1,m,sizeof(struct edge),cmp); int fa,fb;bool flag=0; for (int i=1;i<=m;++i) { fa=getf(e[i].a); fb=getf(e[i].b); if (fa!=fb) { pre[fa]=fb; ans=e[i].w; cnt++; if(cnt==n-1) {flag=1;break;} } } if(flag) printf("%d\n",ans); else printf("-1\n"); return 0; }
View Code
相关文章推荐
- 判断机器大小端
- xcorr 自相关 c++实现
- Opencv的配置
- 同时安装VS2010 + Qt4.8.6 + Qt Add-in 和VS2008 + Qt4.8.6 + Qt Add-in
- ggsci命令提示符中看不到的OGG进程
- 拼接字符串常量
- 兵器簿之github的配置和使用
- NLB单播和多播区别
- NLB单播和多播区别
- 形状类族中的纯虚函数
- 今日微软兑现承若:Windows 10 Build 10130稳定版发布!
- CrossApp 1.1.6新鲜出炉
- C++ delete失败
- 25款简约时尚的页面登陆设计欣赏
- Python IDLE快捷键 汇总
- 教你如何准备一场出色的演讲
- 楼塔当天领袖acm心理(作为励志使用)
- 让进程成为一个daemon
- leetcode之Invert Binary Tree
- Java循环中标签的使用