UVALIVE 3939 Plucking fruits

并查集解决。代码跑的有够慢。应该可以通过边权排序优化。

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
#define MAXN 1010
int p[MAXN];
int Find(int x) {return x == p[x] ? x : p[x] = Find(p[x]);}
int N,M,R;
struct node
{
        int u,v,w;
        friend bool operator < (const node &a,const node &b)
        {
                return a.w < b.w;
        }
}src[MAXN * MAXN];
bool judge(int s,int t)
{
        int x =Find(s);
        int y = Find(t);
        if (x == y) return true;
        return false;
}
bool query(int s,int t,int least)
{
        for (int i = 0 ; i < M ; i++)
        {
                if (src[i].w < least) continue;
                int x = Find(src[i].u), y = Find(src[i].v);
                if (x != y) p[x] = y;
                if (judge(s,t))
                {
                        return true;
                }
        }
        return false;
}
int main()
{
     int kase = 1;
     while (cin >> N >> M >> R)
     {
             cout << "Case " << kase++  << ‘:‘ << endl;
             for (int i = 0 ; i < M ;i++)
                cin >> src[i].u >> src[i].v >> src[i].w;
             for (int i = 0 ; i < R; i++)
             {
                     int u ,v,w;
                     for (int i = 0 ;i <= N ; i++) p[i] = i;
                     cin >> u >> v  >> w;
                     if (query(u,v,w)) puts("yes");
                     else puts("no");
             }
     }
     return 0;
}
时间: 2024-10-17 10:31:25

UVALIVE 3939 Plucking fruits的相关文章

solution

DAY1 A  UVAlive 3937 painting the sticks 给你一些木棒,按照给定的颜色序列染色,每次最多可以染连续的3块(每块的颜色可以不一样),每块可以由任意多个连续木棒组成,求最少步数. 题目里有说不允许覆盖染色吗?统计不同的颜色块的个数,除以3并向上取整就是答案了.. B UValive3938 "Ray, Pass me the dishes!" 给一个长度为n的序列,有m个询问,每次询问某个区间内的和最大的子区间 线段树问题,对于线段树上的每个节点维护

暑训day1解题报告

A - Painting the sticks 因为不能覆盖涂/涂两次,所以就数数有几个三个一块儿就行了. #include<cstdio> int a[100],ans ; int main() { int n , t = 0 ; while (scanf("%d",&n)!=EOF) { for (int i=1; i<=n; ++i) scanf("%d",a+i); ans = 0 ; for (int i=1; i<=n ;

UVALive 4848 Tour Belt

F - Tour Belt Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVALive 4848 Description Korea has many tourist attractions. One of them is an archipelago (Dadohae in Korean), a cluster of small islands sca

UVALive 6467 Strahler Order 拓扑排序

这题是今天下午BNU SUMMER TRAINING的C题 是队友给的解题思路,用拓扑排序然后就可以了 最后是3A 其中两次RE竟然是因为: scanf("%d",mm); ORZ 以后能用CIN还是CIN吧 QAQ 贴代码了: 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <iostre

HDU 1503 Advanced Fruits

Advanced Fruits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3622    Accepted Submission(s): 1872Special Judge Problem Description The company "21st Century Fruits" has specialized in cr

UVALive 7077 Little Zu Chongzhi&#39;s Triangles (有序序列和三角形的关系)

这个题……我上来就给读错了,我以为最后是一个三角形,一条边可以由多个小棒组成,所以想到了状态压缩各种各样的东西,最后成功了……结果发现样例过不了,三条黑线就在我的脑袋上挂着,改正了以后我发现N非常小,想到了回溯每个棍的分组,最多分5组,结果发现超时了……最大是5^12 =  244,140,625,厉害呢…… 后来想贪心,首先想暴力出所有可能的组合,结果发现替换问题是一个难题……最后T T ,我就断片了.. 等看了别人的办法以后,我才发现我忽视了三角形的特性,和把数据排序以后的特点. 如果数据从

Gym 100299C &amp;&amp; UVaLive 6582 Magical GCD (暴力+数论)

题意:给出一个长度在 100 000 以内的正整数序列,大小不超过 10^ 12.求一个连续子序列,使得在所有的连续子序列中, 它们的GCD值乘以它们的长度最大. 析:暴力枚举右端点,然后在枚举左端点时,我们对gcd相同的只保留一个,那就是左端点最小的那个,只有这样才能保证是最大,然后删掉没用的. UVaLive上的数据有问题,比赛时怎么也交不过,后来去别的oj交就过了. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000&qu

UVALive 6511 Term Project

Term Project Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. Original ID: 651164-bit integer IO format: %lld      Java class name: Main 解题:强连通分量 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn = 1

UVALive 6508 Permutation Graphs

Permutation Graphs Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. Original ID: 650864-bit integer IO format: %lld      Java class name: Main 解题:逆序数 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long l