CSUOJ 1651 Weirdo

1651: Weirdo

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 40  Solved: 21
[Submit][Status][Web Board]

Description

小x是一个奇葩,奇葩的小x终于盼来了五一长。。好吧!短假。早已乏味的大学生活让小x感到绝望。与其天天做在电脑面前废寝忘食的打LOL,还不如来一场说走就走的旅行,去看看外面的世界!已经准备去往B市的小x决定让自己的旅行更有意义一点,他觉得人生本就是一场漫长的旅行,重要的不是终点,而是奇葩的路线。他决定找一条通往B市的最均匀的路线!什么样的路线最呀最均匀?当然是这条线路上的路段之间的宽度差的绝对值最小的那条就均匀啦!现在给出n个城市和m条道路及这m条道路的路宽,并且保证居住在A市的小x是可以到达B市,你能帮助小x找出这样的最均匀的路线么,输出这条路线上的最大差值!

Input

每个样例的第一行n,m,A,B分别表示有n个点,m条路段,小x的居住地和小x要到的B市,接下来m行,每行三个数字u,v,w分别表示从u到v的这段路的路宽(路是双向的)。 
2 <= n <= 1500, 
m <= 3000, 
0 <= v,u < n, 
w < INT_MAX

Output

每个样例输出一行

Sample Input

5 5 4 0
0 3 22022
1 2 8871
1 3 9421
2 4 24398
3 4 3344

Sample Output

15527

HINT

Source

解题:直接枚举下界,求最小上界用类似于最小生成树Kruskal的做法

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 using namespace std;
 5 typedef long long LL;
 6 const int maxn = 40001;
 7 const int INF = 0x3f3f3f3f;
 8 struct arc{
 9     int u,v,w;
10     bool operator<(const arc &t) const{
11         return w < t.w;
12     }
13 }e[maxn];
14 int uf[maxn],n,m,S,T,ret;
15 bool flag;
16 int Find(int x){
17     int t = x;
18     while(uf[x] != x) x = uf[x];
19     while(uf[t] != t){
20         int tmp = uf[t];
21         uf[t] = x;
22         t = tmp;
23     }
24     return x;
25 }
26 int kruskal(int low){
27     for(int i = 0; i <= n; ++i) uf[i] = i;
28     for(int i = low; i < m; ++i){
29         int x = Find(e[i].u);
30         int y = Find(e[i].v);
31         if(x == y) continue;
32         uf[x] = y;
33         if(Find(S) == Find(T)) return e[i].w - e[low].w;
34         if((LL)e[low].w + ret <= e[i].w) return INF;
35     }
36     flag = false;
37     return INF;
38 }
39 int main(){
40     //freopen("Weirdo.in","r",stdin);
41     //freopen("oo.txt","w",stdout);
42     while(~scanf("%d %d %d %d",&n,&m,&S,&T)){
43         for(int i = 0; i < m; ++i)
44             scanf("%d %d %d",&e[i].u,&e[i].v,&e[i].w);
45         sort(e,e+m);
46         ret = INF;
47         flag = true;
48         for(int i = 0; i < m && flag; ++i)
49             ret = min(kruskal(i),ret);
50         printf("%d\n",ret);
51     }
52     return 0;
53 }

时间: 2024-10-14 19:41:35

CSUOJ 1651 Weirdo的相关文章

poj 1651 区间dp

题目链接:http://poj.org/problem?id=1651 Description The multiplication puzzle is played with a row of cards, each containing a single positive integer. During the move player takes one card out of the row and scores the number of points equal to the prod

poj 1651

hnldyhy// poj 1651 矩阵连乘 DP #include <iostream>#include <string.h>using namespace std;int dp[103][103],s[103];int main(){ int n,i,j,k,min; cin>>n; for(i=1;i<=n;++i) cin>>s[i]; memset(dp,0,sizeof(dp)); for(i=n-2;i>=1;--i) for(j

CSUOJ 1010 Water Drinking

Description The Happy Desert is full of sands. There is only a kind of animal called camel living on the Happy Desert. ‘Cause they live here, they need water here. Fortunately, they find a pond which is full of water in the east corner of the desert.

CSUOJ 1217 奇数个的那个数

Description 给定些数字,这些数中只有一个数出现了奇数次,找出这个数. Input 每组数据第一行n表示数字个数,1 <= n <= 2 ^ 18 且 n % 2 == 1. 接下来n行每行一个32位有符号整数. Output 出现奇数次那个数,每组数据对应一行. Sample Input 5 1 1 2 2 3 7 1 2 1 2 2 3 3 Sample Output 3 2 看了大神的代码 使用位运算o(╯□╰)o 1 # include <stdio.h> 2 i

Aizu 2164 CSUOJ 1436 Revenge of the Round Table

dp套一个burnside的壳子核心还是dpdp[i]表示有i个循环节时的染色方案数注意在dp的时候,不需要考虑重构的问题因为burnside会解决重构的问题dpA[i][j]表示以A开头,长度为i,结尾为j个A的合法方案数dpB[i][j]表示以B开头,长度为i,结尾为j个A的合法方案数接下来我们用dpA,dpB来计算dp[i]显然对于所有的dpB[i][1~k]都是满足dp[i]的因为它表示以B开头,以A结尾的染色方案,且结尾没有超过k个另外还有一部分就是以A开头的了假设我们在整个串的最前面

csuoj 1511: 残缺的棋盘

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1511 1511: 残缺的棋盘 时间限制: 1 Sec  内存限制: 128 MB 题目描述 输入 输入包含不超过10000 组数据.每组数据包含6个整数r1, c1, r2, c2, r3, c3 (1<=r1, c1, r2, c2, r3, c3<=8). 三个格子A, B, C保证各不相同. 输出 对于每组数据,输出测试点编号和最少步数. 样例输入 1 1 8 7 5 6 1 1 3 3

CSUOJ 1343

1343: Long Long Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 180  Solved: 48[Submit][Status][Web Board] Description 现在有两个单调递增序列,第一个序列有N个整数,第二个序列有M个整数,现在你可以从第一个序列中选一个数x,然后从第二个序列中选一个数y,那么有多少种情况满足x+y<=K呢? Input 输入包含多组数据.    对于每组测试数据,第一行包含两个整数N, M , K 

并查集--CSUOJ 1601 War

并查集的经典题目: CSUOJ 1601: War Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 247  Solved: 70[Submit][Status][Web Board] Description AME decided to destroy CH’s country. In CH’ country, There are N villages, which are numbered from 1 to N. We say two vill

CSUOJ 1256 天朝的单行道

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1256 题目大意: 在另一个平行宇宙中,有一个神奇的国度名叫天朝.天朝一共有N个城市(标号分别为1, 2, …, N),M条道路,为了方便交通管制,天朝的M条道路都是单行道. 不久前天朝大选,小Q当选了天朝的总统.小Q家住在城市1,但天朝的办公地点在城市N,于是为了便于工作,小Q决定举家从城市1搬迁到城市N去居住.然而小Q惊奇的发现,现在并不存在从城市1出发到城市N路线. 但这点难题是无