UVA 818 Cutting Chains

题意就是给一张无向图,去掉某些结点,然后连成一条链,问最少去掉几个结点。

n很小n<=15,所以直接枚举2^15个状态就行啦。

链的条件是1.无环,2.没有度大于2的点,3.把n个散链连起来需要n-1次拼接,去掉的结点数>=n-1。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 15;

int G[maxn][maxn];
int n;

int c[maxn];

bool dfs(int u,int s,int fa)
{
    c[u] = 1;
    for(int v = 0; v < n; v++) if(!((s>>v)&1) && G[u][v] && v != fa) {
        if(c[v] || dfs(v,s,u)) return true;
    }
    return false;
}
int cn;

bool have_circle(int s)
{
    memset(c,0,sizeof(c));
    for(int i = 0;i < n; i++)
        if(!((s>>i)&1) && !c[i] ){
            cn++;
            if(dfs(i,s,-1)) return true;
        }

    return false;
}

bool two(int s)
{
    for(int i = 0; i < n; i++) if(!((s>>i)&1)) {
        int deg = 0;
        for(int j = 0; j < n; j++) if(!((s>>j)&1) && G[i][j]) {
            deg++;
        }
        if(deg>2) return true;
    }
    return false;
}

int cal(int s,int &t){
    t = 0;
    while(s){
        if(s&1) t++;
        s>>=1;
    }
    return t;
}

int main()
{
    //freopen("in.txt","r",stdin);
    int cas = 0;
    while(~scanf("%d",&n)&&n){
        int u,v;
        memset(G,0,sizeof(G));
        while(~scanf("%d%d",&u,&v)&~u){
            G[u-1][v-1] = G[v-1][u-1] = 1;
        }
        int ans = 233;
        for(int s = 0,sz = 1<<n; s < sz; s++){
            cn = 0;
            if(!two(s) && !have_circle(s)){
                int t;
                if(cn-1 <= cal(s,t))
                    ans = min(ans,t);
            }
        }
        printf("Set %d: Minimum links to open is %d\n", ++cas, ans);
    }
    return 0;
}
时间: 2024-12-10 04:45:33

UVA 818 Cutting Chains的相关文章

UVa 818 Cutting Chains 题解

难度:β 建议用时:40 min 这题应该有迭代加深搜索的解法的,但我参考网友做法,用暴力枚举法. 大致思路是:枚举圆环的每种开闭状态,统计符合要求的最小的打开的圆环的数量. 要判断打开圆环的某一种方法是否符合要求,容易想到的一个是先判断除去这些已打开的圆环外的闭合圆环有没有组成一个环. 如果还有环,那么无论把打开的圆环怎样重新连城一条链套回去,都不能消除环,而题目要求我们够一条链.所以如果任然存在环的方法是不行的. 0000   0 (此时还有一个环没打开,不能组成链) 0    0 0000

UVA 818 Cutting Chains (DFS)

What a find! Anna Locke has just bought several links of chain some of which may be connected. They are made from zorkium, a material that was frequently used to manufacture jewelry in the last century, but is not used for that purpose anymore. It ha

UVA - 818 Cutting Chains 暴力

题目大意:给出n个环(类似奥运五环的那种环),要求你打开其中的m个环,然后以这m个环为中介,使得所有的环能形成一条链 解题思路:暴力枚举,用二进制表示断开的环的位置和数量. 断开环后,和该环相连都断开了,也就是该环变成了一个孤立的环 接着判断一下非断开的环能否连成一个环,如果能连成一个环,那就不可能通过m个环当中介连成一条链 还得判断一下非断开的环的度,如果度超过2,也不能变成一条链 #include<cstdio> #include<cstring> #include<al

uva 10003 Cutting Sticks 简单区间dp

// uva 10003 Cutting Sticks 区间dp // 经典的区间dp // dp(i,j)表示切割小木棍i-j所需要的最小花费 // 则状态转移为dp(i,j) = min{dp(i,k) + dp(k,j) + a[j]-a[i]) // 其中k>i && k<j // a[j] - a[i] 为第一刀切割的代价 // a[0] = 0,a[n+1] = L; // dp数组初始化的时候dp[i][i+1]的值为 0,这表示 // 每一段都已经是切割了的,不

uva 10003 Cutting Sticks (DP)

uva 10003 Cutting Sticks Description 你的任务是替一家叫Analog Cutting Machinery (ACM)的公司切割木棍.切割木棍的成本是根据木棍的长度而定.而且切割木棍的时候每次只切一段.很显然的,不同切割的顺序会有不同的成本.例如:有一根长10公尺的木棍必须在第2.4.7公尺的地方切割.这个时候就有几种选择了.你可以选择先切2公尺的地方,然后切4公尺的地方,最后切7公尺的地方.这样的选择其成本为:10+8+6=24.因为第一次切时木棍长10公尺,

UVA 10003 Cutting Sticks(区间dp)

Description  Cutting Sticks  You have to cut a wood stick into pieces. The most affordable company, The Analog Cutting Machinery, Inc. (ACM), charges money according to the length of the stick being cut. Their procedure of work requires that they onl

uva 818 (位运算 + 判环)

 Cutting Chains  What a find! Anna Locke has just bought several links of chain some of which may be connected. They are made from zorkium, a material that was frequently used to manufacture jewelry in the last century, but is not used for that purpo

uva 10003 Cutting Sticks 【区间dp】

题目:uva 10003 Cutting Sticks 题意:给出一根长度 l 的木棍,要截断从某些点,然后截断的花费是当前木棍的长度,求总的最小花费? 分析:典型的区间dp,其实和石子归并是一样的,花费就是石子的和,那么久不用多说了. AC代码: #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include <map> #include <

UVA 10003 Cutting Sticks 区间DP+记忆化搜索

UVA 10003 Cutting Sticks+区间DP 纵有疾风起 题目大意 有一个长为L的木棍,木棍中间有n个切点.每次切割的费用为当前木棍的长度.求切割木棍的最小费用 输入输出 第一行是木棍的长度L,第二行是切割点的个数n,接下来的n行是切割点在木棍上的坐标. 输出切割木棍的最小费用 前话-区间dp简单入门 区间dp的入门下面博客写的非常好,我就是看的他们博客学会的,入门简单,以后的应用就得靠自己了. https://blog.csdn.net/qq_41661809/article/d