hdu5431 Travel

Problem Description

Jack likes to travel around the world, but he doesn’t like to wait. Now, he is traveling in the Undirected Kingdom. There are n cities and m bidirectional roads connecting the cities. Jack hates waiting too long on the bus, but he can rest at every city. Jack can only stand staying on the bus for a limited time and will go berserk after that. Assuming you know the time it takes to go from one city to another and that the time Jack can stand staying on a bus is x minutes, how many pairs of city (a,b) are there that Jack can travel from city a to b without going berserk?

Input

The first line contains one integer T,T≤5, which represents the number of test case.

For each test case, the first line consists of three integers n,m and q where n≤20000,m≤100000,q≤5000. The Undirected Kingdom has n cities and m bidirectional roads, and there are q queries.

Each of the following m lines consists of three integers a,b and d where a,b∈{1,...,n} and d≤100000. It takes Jack d minutes to travel from city a to city b and vice versa.

Then q lines follow. Each of them is a query consisting of an integer x where x is the time limit before Jack goes berserk.

Output

You should print q lines for each test case. Each of them contains one integer as the number of pair of cities (a,b) which Jack may travel from a to b within the time limit x.

Note that (a,b) and (b,a) are counted as different pairs and a and b must be different cities.

Sample Input
1
5 5 3
2 3 6334
1 5 15724
3 5 5705
4 3 12382
1 3 21726
6000
10000
13000

Sample Output
2
6
12

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
const int oo = 0x3f3f3f3f;
const int N = 200010;
const int M = 100100;
typedef long long LL;
int father[N], num[N], QQ[N], n, m;
/**< num[i]表示i这个根节点 所包含的节点个数*/
struct da
{
    int u, v, w;
    bool operator < (const da &a)const
    {
        return w < a.w;
    }
}as[N];
struct da1
{
    int id, x;
    bool operator < (const da1 &a)const
    {
        return x < a.x;
    }
}ac[N];
int fin(int x)
{
    if(x != father[x])
        father[x] = fin(father[x]);
    return father[x];
}
void init()
{
    for(int i = 0; i <= n; i++)
    {
        father[i] = i;
        num[i] = 1;
    }
    memset(QQ, 0, sizeof(QQ));
}
int main()
{
    int T, i, j, k;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d %d %d", &n, &m, &k);
        init();
        for(i = 0; i < m; i++)
            scanf("%d %d %d", &as[i].u, &as[i].v, &as[i].w);
        sort(as, as+m);
        for(i = 0; i < k; i++)
        {
             scanf("%d", &ac[i].x);
             ac[i].id = i;
        }
        sort(ac, ac+k);
        int ans=0;j = 0;
        for(i = 0; i < k; i++)
        {
            while(j < m && as[j].w <= ac[i].x)
            {
                int x = fin(as[j].u);
                int y = fin(as[j].v);
                j++;
                if(x != y)
                {
                    father[x] = y;
                    ans += num[y]*num[x];/**< 集合合并 */
                    num[y] += num[x];
                }
            }
            QQ[ac[i].id] = 2*ans;
        }
        for(i = 0; i < k; i++)
            printf("%d\n", QQ[i]);

    }
    return 0;
}

时间: 2024-08-10 14:48:15

hdu5431 Travel的相关文章

UVA 1048 - Low Cost Air Travel(最短路)

UVA 1048 - Low Cost Air Travel 题目链接 题意:给定一些联票,在给定一些行程,要求这些行程的最小代价 思路:最短路,一张联票对应几个城市就拆成多少条边,结点表示的是当前完成形成i,在城市j的状态,这样去进行最短路,注意这题有坑点,就是城市编号可能很大,所以进行各种hash 代码: #include <cstdio> #include <cstring> #include <vector> #include <queue> #in

Travel(最短路)

Travel The country frog lives in has nn towns which are conveniently numbered by 1,2,…,n1,2,…,n. Among n(n−1)2n(n−1)2 pairs of towns, mm of them are connected by bidirectional highway, which needs aa minutes to travel. The other pairs are connected b

Travel(HDU 5441 2015长春区域赛 带权并查集)

Travel Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 2404    Accepted Submission(s): 842 Problem Description Jack likes to travel around the world, but he doesn’t like to wait. Now, he is tr

ural 1286. Starship Travel

1286. Starship Travel Time limit: 1.0 secondMemory limit: 64 MB It is well known that a starship equipped with class B hyperengine is able to travel from any planet to any other planet. But your starship got severe damage in the last travel and now i

hdu 4571 Travel in time (Floyd+记忆化搜索)

Travel in time Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1853    Accepted Submission(s): 374 Problem Description Bob gets tired of playing games, leaves Alice, and travels to Changsha alo

travel hamburg

The area west of Hamburg's central railway station is mainly a shopping area with the streets Spitaler Straße and Mönckebergstraße, leading to Hamburg's town hall. The building behind the city hall is Hamburg's House of Commerce (Börse). Between the

poj 3230 Travel(dp)

Description One traveler travels among cities. He has to pay for this while he can get some incomes. Now there are n cities, and the traveler has m days for traveling. Everyday he may go to another city or stay there and pay some money. When he come

pat1030. Travel Plan (30)

1030. Travel Plan (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A traveler's map gives the distances between cities along the highways, together with the cost of each highway. Now you are supposed to write a program to help

PAT 1030. Travel Plan (30)

1030. Travel Plan (30) A traveler's map gives the distances between cities along the highways, together with the cost of each highway. Now you are supposed to write a program to help a traveler to decide the shortest path between his/her starting cit