zoukankan      html  css  js  c++  java
  • hdu5452

    http://acm.hdu.edu.cn/showproblem.php?pid=5452

    题意:给个图T(图G的最小生成树),然后再给定图G的剩余边,问你从图T中当且割一条边的情况再割图G中不属于图T的边,使整个图(图G)不联通,求最小割;

    分析:1、只能并且要求割图T中的一条边,所以只能割叶子节点的边才是不会差的,因为非叶子节点一定连有多条边(根节点有可能只能一条边,但树的根是可以任意的,我们这里把节点度数为1的点当作叶子节点)

       2、因为图T是图G的最小生成树,所以由其性质得图T一定含有图G的所有顶点,而图G剩下的边肯定是在这颗树上某俩个节点进行连接(题目有保证剩下的边不会是生成树的边);

       3、由1、2得,我们把这个图割成不联通一定是把某个叶子借点孤立起来,如果不是这样的话,你必定要割掉生成树中的其他边才能使图不联通,但我们已经割了连叶子节点的边,所以是不符合题意的。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int M=2e4+4;
    const int inf =0x3f3f3f3f;
    int T[M],G[M];
    int main(){
        int t;
        scanf("%d",&t);
        for(int k=1;k<=t;k++){
            int n,m;
            scanf("%d%d",&n,&m);
            for(int i=0;i<=n;i++)
                T[i]=G[i]=0;
            for(int i=0;i<n;i++){
                int u,v;
                scanf("%d%d",&u,&v);
                T[u]++;
                T[v]++;
            }
            for(int i=n;i<m;i++){
                int u,v;
                scanf("%d%d",&u,&v);
                G[u]++;
                G[v]++;
            }
            int minn=inf;
            
            for(int i=1;i<=n;i++){
                if(T[i]<2)
                    minn=min(minn,G[i]);
            }
            printf("Case #%d: ",k);
            printf("%d
    ",minn+1);
        }
        return 0;
    
    }
    View Code
  • 相关阅读:
    ZOJ 3735 Cake(区间DP,最优三角剖分)
    POJ 1185 炮兵阵地 (状态压缩DP)
    POJ 3415 Common Substrings (后缀数组,长度不小于k的公共子串的个数)
    NSNumberFormatter 千分符
    遭遇String.getBytes()
    HDFS数据的Checksum
    hadoop mapreduce作业流程概论
    HDFS 安全模式
    hadoop的dfs.replication
    hadoop升级
  • 原文地址:https://www.cnblogs.com/starve/p/11428740.html
Copyright © 2011-2022 走看看