码迷,mamicode.com
首页 > 其他好文 > 详细

UVALive 4848 Tour Belt

时间:2014-11-05 00:00:11      阅读:469      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   io   color   ar   os   for   

F - Tour Belt
Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu

Description

bubuko.com,布布扣
 
Korea has many tourist attractions. One of them is an archipelago (Dadohae in Korean), a cluster of small islands scattered in the southern and western coasts of Korea. The Korea Tourism Organization (KTO) plans to promote a new tour program on these islands. For this, The KTO wants to designate two or more islands of the archipelago as a tour belt.

There are n islands in the archipelago. The KTO focuses on the synergy effect created when some islands are selected for a tour belt. Synergy effects are assigned to several pairs of islands. A synergy effect SE(uv) or SE(vu) between two islands u and v is a positive integer which represents a value anticipated when both u and v are included in a tour belt. The KTO wants to select two or more islands for the tour belt so that the economic benefit of the tour belt is as high as possible.

To be precise, we define a connected graph G = (VE), where V is a set of n vertices and E is a set of m edges. Each vertex of V represents an island in the archipelago, and an edge (uv) of E exists if a synergy effect SE(uv) is defined between two distinct vertices (islands) uand v of V. Let A be a subset consisting of at least two vertices in V. An edge (uv) is an inside edge of A if both u and v are in A. An edge(uv) is a border edge of A if one of u and v is in A and the other is not in A.

A vertex set B of a connected subgraph of G with 2bubuko.com,布布扣B|bubuko.com,布布扣n is called a candidate for the tour belt if the synergy effect of every inside edge of B is larger than the synergy effect of any border edge of B. A candiate will be chosen as the final tour belt by the KTO. There can be many possible candidates in G. Note that V itself is a candidate because there are no border edges. The graph in Figure 1(a) has three candidates {1,2}, {3,4} and {1,2,3,4}, but {2,3,4} is not a candidate because there are inside edges whose synergy effects are not larger than those of some border edges. The graph in Figure 1(b) contains six candidates, {1,2}, {3,4}, {5,6}, {7,8}, {3,4,5,6} and {1,2,3,4,5,6,7,8}. But {1,2,7,8} is not a candidate because it does not form a connected subgraph of G, i.e., there are no edges connecting {1,2} and {7,8}.

 

bubuko.com,布布扣

 

Figure 1. Graphs and their good subsets marked by gray ellipses.

The KTO will decide one candidate in G as the final tour belt. For this, the KTO asks you to find all candidates in G. You write a program to print the sum of the sizes of all candidates in a given graph G. For example, the graph in Figure 1(a) contains three candidates and the sum of their sizes is 2 + 2 + 4 = 8, and the graph in Figure 1(b) contains six candidates and the sum of their sizes is 2 + 2 + 2 + 2 + 4 + 8 = 20.

 

Input

Your program is to read input from standard input. The input consists of T test cases. The number of test cases T is given in the first line of the input. Each test case starts with a line containing two integers n ( 2bubuko.com,布布扣nbubuko.com,布布扣5, 000) and m ( 1bubuko.com,布布扣mbubuko.com,布布扣bubuko.com,布布扣), where n represents the number of vertices (islands) and m represents the number of edges of a connected graph G. Islands are numbered from 1 to n. In the following m lines, the synergy effects assigned to m edges are given; each line contains three integers, uv, and k ( 1bubuko.com,布布扣ububuko.com,布布扣vbubuko.com,布布扣n1bubuko.com,布布扣kbubuko.com,布布扣105), where k is the synergy effect between two distinct islands u and v, i.e., SE(uv) = SE(uv) = k.

 

Output

Your program is to write to standard output. Print exactly one line for each test case. Print the sum of the sizes of all candidates for a test case.

The following shows sample input and output for two test cases.

 

Sample Input

 

2
4 6
1 2 3
2 3 2
4 3 4
1 4 1
2 4 2
1 3 2
8 7
1 2 2
2 3 1
3 4 4
4 5 3
5 6 4
6 7 1
7 8 2

 

Sample Output

 

8
20

题意:在一个联通无向图里面找一个联通子图,如果这个联通子图里面的最小边权大于
子图和非子图的连边的最大值,那么ans += 联通子图的点数目。输出ans。
思路:按边从大到小排序,然后一个个加进来,如果原来这条边的两个点是联通的,那么不理
不连通就去判断是否符合条件,(纯暴力。。)

bubuko.com,布布扣
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<iostream>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<algorithm>
#define INF 0x3f3f3f3f
#define FINF 1e9
#define ll long long
#define BUG printf("hehe!~\n")
using namespace std;

const int N=5010;
const int M=22501000;

struct Edge
{
    int u,v,w;
}edge[M];

bool cmp(Edge A,Edge B)
{
    return A.w>B.w;
}

int cur[N+N];
int n,m;
int fa[N];

int findp(int x) {
    return fa[x]==x?x:fa[x]=findp(fa[x]);
}

void init()
{
    for(int i=0;i<=n;++i) fa[i]=i,cur[i]=1;
}

int connect(int fu,int fv)
{
    cur[fu]+=cur[fv];
    return cur[fu];
}

int main()
{
    int _;
    cin>>_;
    int u,v,w;
    int x,y,num;
    bool flag;
    int ans,cnt;
    while(_--) {
        scanf("%d%d",&n,&m);
        init();
        ans=0;
        for(int i=0;i<m;++i) {
            scanf("%d%d%d",&u,&v,&w);
            edge[i].u=u, edge[i].v=v, edge[i].w=w;
        }
        sort(edge,edge+m,cmp);
        num=n;
        for(int i=0;i<m;++i) {
            u=edge[i].u,v=edge[i].v,w=edge[i].w;
            int fu=findp(u);
            int fv=findp(v);
            if(fu!=fv) {
                num++;
                fa[fv]=num;
                fa[fu]=num;

                fa[num]=num;
                flag=true;
                cur[num]=cur[fv]+cur[fu];
                cnt=cur[num];

                int mn=INF,mx=-INF;
                for(int j=0;j<m;++j) {
                    Edge& e=edge[j];
                    x=findp(e.u);y=findp(e.v);
                    if(x==y&&x==num) mn=min(mn,e.w);
                    else if(x==num||y==num) {
                        mx=max(mx,e.w);
                    }
                }
                if(mn>mx) {
                    ans+=cnt;
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}
View Code

 

UVALive 4848 Tour Belt

标签:des   style   blog   http   io   color   ar   os   for   

原文地址:http://www.cnblogs.com/20120125llcai/p/4075106.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!