Aizu 2306 Rabbit Party 爆搜顶点导出子图

题目链接:点击打开链接

题意:

给定n个点的完全图,下面给出m条边权不为0的边

下面m行给出边和边权。

其他的边边权都为0.

选择一个顶点导出子图,该子图的每个点点权为 该点连接的最小边权。

找一个这样的子图使得点权和最大,输出点权和。

思路:

因为是一个完全图,所以我们选择的点构成的图一定不包含权值为0的边。因为若包含了权值为0的边,则大可以把这两点删掉而不会减小答案。

所以我们选择的图中的边一定只 包含给出的m条边,且由这m条边构成的一个团。

再判断一下这个团中最多的点数,设最多有n个点,则这个团的边数为 n*(n-1)/2 ,而输入最多只有100条边

即 n*(n-1)/2 <= 100 => n <=14

所以爆搜这14个点就可以了

#include<bits/stdc++.h>
template <class T>
inline bool rd(T &ret) {
    char c; int sgn;
    if(c=getchar(),c==EOF) return 0;
    while(c!='-'&&(c<'0'||c>'9')) c=getchar();
    sgn=(c=='-')?-1:1;
    ret=(c=='-')?0:(c-'0');
    while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
    ret*=sgn;
    return 1;
}
template <class T>
inline void pt(T x) {
    if (x <0) {
        putchar('-');
        x = -x;
    }
    if(x>9) pt(x/10);
    putchar(x%10+'0');
}
using namespace std;
typedef long long ll;
const int N = 105;
int ans, mp[N][N];
int a[20], d[20], n;
void work(int n){
    int c = 0, cc;
    for(int i = 1; i <= n; i++)
    {
        cc = 1e8;
        for(int j = 1; j <= n; j++)
            if(i!=j)
            cc = min(cc, mp[a[i]][a[j]]);
        c += cc;
    }
    ans = max(ans, c);
}
void dfs(int u){
    if(u >= 3)work(u-1);
    for(int i = a[u-1]+1; i <= n; i++)
    {
        bool ok = true;
        for(int j = 1; j < u && ok; j++)
            if(mp[i][a[j]] == 0) ok = false;
        a[u] = i;
        if(ok)dfs(u+1);
    }
}
int main(){
    int u, v, d, m;
    while(cin>>n>>m){
        ans = 0;
        memset(mp, 0, sizeof mp);
        while(m--){
            rd(u);rd(v);rd(d);
            mp[u][v] = mp[v][u] = d;
            ans = max(ans, d<<1);
        }
        dfs(1);
        cout<<ans<<endl;
    }
    return 0;
}

Rabbit Party

Time Limit : 5 sec, Memory Limit : 65536 KB

Rabbit Party

A rabbit Taro decided to hold a party and invite some friends as guests. He has n rabbit
friends, and m pairs
of rabbits are also friends with each other. Friendliness of each pair is expressed with a positive integer. If two rabbits are not friends, their friendliness is assumed to be 0.

When a rabbit is invited to the party, his satisfaction score is defined as the minimal friendliness with any other guests. The satisfaction of the party itself is defined as the sum of satisfaction score for all the guests.

To maximize satisfaction scores for the party, who should Taro invite? Write a program to calculate the maximal possible satisfaction score for the party.

Input

The first line of the input contains two integers, n and m (1≤n≤1000≤m≤100).
The rabbits are numbered from 1 to n.

Each of the following m lines
has three integers, uv and fu and v (1≤u,v≤nu≠v1≤f≤1,000,000)
stands for the rabbits‘ number, and f stands
for their friendliness.

You may assume that the friendliness of a pair of rabbits will be given at most once.

Output

Output the maximal possible satisfaction score of the party in a line.

Sample Input 1

3 3
1 2 3
2 3 1
3 1 2

Output for the Sample Input 1

6

Sample Input 2

2 1
1 2 5

Output for the Sample Input 2

10

Sample Input 3

1 0

Output for the Sample Input 3

0

Sample Input 4

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

Output for the Sample Input 4

16
时间: 2024-12-12 17:41:01

Aizu 2306 Rabbit Party 爆搜顶点导出子图的相关文章

Aizu - 2306 Rabbit Party (DFS图论)

G. Rabbit Party Time Limit: 5000ms Case Time Limit: 5000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: Main Submit Status pid=39423" class="goprob button ui-button ui-widget ui-state-default ui-corner-all ui-button

爆搜解hdu1572下沙小面的(2)

#include<iostream> #include<map> #include<string> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath> #include<queue> #include<vector> #include<algorithm> using namespace std; in

有一种恐怖,叫大爆搜

到目前这个阶段,大爆搜做了好几个,有必要做一下小的总结了. 玛雅游戏:出门左转 http://www.cnblogs.com/Loser-of-Life/p/7247413.html的A 斗地主:出门右转http://www.cnblogs.com/Loser-of-Life/p/7259858.html的B 天鹅会面:出门直行http://www.cnblogs.com/Loser-of-Life/p/7295770.html的A 引水入城:链接:http://cogs.pro/cogs/pr

poj1077 Eight【爆搜+Hash(脸题-_-b)】

题目链接:http://poj.org/problem?id=1077 题目描述:民间流传的推15游戏,不过这里简化为3*3,也就是八数码问题,‘x’表示空位.与AOJ0121的“Seven Puzzle”类似. 思路:没什么特别的,构造字符串队列,爆搜一下.注意Hash函数,哈得好就哈哈,哈得不好就只能呵呵了...我的hash函数是∑((str[i]*7^i))%1000007外加在x的位置加上i*10007,547MS水过.不过在一样的题hdu1043时限变成了5秒却还是TLE了,果然此题杭

POJ 1166 The Clocks (爆搜 || 高斯消元)

题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四.五个钟调正,如原来是0点,那么调正后为3点.问经过那些步骤可以导致9个钟的位置都在0点. 分析: 这个本来是一个高斯消元的题目,但是 听说周期4不是素数, 求解过程中不能进行取余.因为取余可能导致解集变大. 不过也有用高斯消元做的,下面是用高斯消元的分析 ” Discuss也有人讨论了,4不是质数

HDU 4735 DLX爆搜

Little Wish~ lyrical step~ Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 417    Accepted Submission(s): 109 Problem Description N children are living in a tree with exactly N nodes, on each n

hdu 5031 Lines 爆搜

其实嘞,这个线可以只延伸一端 然后嘞,爆搜一次就可以 最后嘞,600-800ms过 本弱就是弱啊,你来打我呀-- #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int a[100][100]; int n,m,ans; bool dfs(int step) { int i,j,t,ii,jj,x,y,cnt,tx,t

【BZOJ-1853&amp;2393】幸运数字&amp;Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝

1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 1817  Solved: 665[Submit][Status][Discuss] Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是太少了,比如在[1,100]的区间内就只有6个(6,8,

HDU 5025 水爆搜

2014 ACM/ICPC Asia Regional Guangzhou Online 水爆搜 N*N矩阵,找最长的一条路径,使'.'最多,路径可以且最多可以转一次90°. 枚举每个点,枚举8方向连续的'.'有多少个,再枚举路径方式. #include "stdio.h" #include "string.h" int main() { int n,ans,i,j,k; int sum[9]; char str[101][101]; while (scanf(&q