bfs+状态压缩求出所有的状态,然后由于第一个节点需要特殊处理,可以右移一位剔除掉,也可以特判。然后采用集合的操作,

#pragma comment(linker,"/STACK:1024000000,1024000000")
#include <cstdio>
#include <queue>
using namespace std;
#define inf 0x3f3f3f3f int n, m, cnt;
int head[17], next[17 * 17 * 2 + 3][3], dp[1 << 17][17], dis[1 << 17], num[1 << 17]; void add (int u, int v, int w)
{
next[cnt][1] = v;
next[cnt][2] = w;
next[cnt][0] = head[u];
head[u] = cnt++;
} void bfs ()
{
queue<pair<int, int> > q;
q.push(make_pair(0, 1));
dp[1][0] = 0;
while (!q.empty()){
pair<int, int> p = q.front();
q.pop();
int su = p.second;
int u = p.first;
for (int i = head[u]; i != -1; i = next[i][0]){
int v = next[i][1];
int w = next[i][2];
int sv = su|(1 << v);
if(dp[sv][v] > dp[su][u] + w){
dp[sv][v] = dp[su][u] + w;
q.push(make_pair(v, sv));
}
}
}
} int main ()
{
//freopen ("in.txt", "r", stdin);
int t, count = 0;
scanf ("%d", &t);
while (t--)
{
scanf ("%d %d", &n, &m);
int u, v, w;
for (int i = 0; i < n; ++i) head[i] = -1;
for (int i = (1 << n) - 1; i >= 0; --i){
dis[i] = inf;
num[i] = inf;
for (int j = 0; j < n; ++j) dp[i][j] = inf;
}
cnt = 0;
for (int i = 0; i < m; ++i){
scanf ("%d %d %d", &u, &v, &w);
add (u - 1, v - 1, w);
add (v - 1, u - 1, w);
}
scanf ("%d", &m);
v = 0;
for (int i = 0; i < m; ++i){
scanf ("%d", &u);
v |= (1 << (u - 1));
}
v >>= 1;
if (!m || (m == 1 && u == 1)){
printf("Case %d: 0\n", ++count);
continue;
}
bfs ();
u = inf;
w = (1 << (n-1)) - 1;
for(int i = 1; i < (1 << n); ++i)
for(int j = 0; j < n; ++j)
dis[i >> 1] = min(dis[i >> 1], dp[i][j]);
for (int i = 1; i <= w; ++i)
for (int j = i; j; j = (j - 1) & i)
num[i] = min(num[i], max(dis[j], dis[i ^ j]));
for (int i = 1; i <= w; ++i)
for(int j = i; j; j = (j - 1) & i)
if((i & v) == v) u = min(u, max(num[j], dis[i ^ j]));
if (u == inf) u = -1;
printf("Case %d: %d\n", ++count, u);
}
return 0;
}

hdu 4640 Island and study-sister的更多相关文章

  1. hdu 4640 Island and study-sister(状态压缩dp)

    先处理前两个学长到达各个点所需要的最少时间,在计算前两个学长和最后一个学长救出所有学妹的最少时间. #include<stdio.h> #include<string.h> # ...

  2. HDU 4280 Island Transport(网络流,最大流)

    HDU 4280 Island Transport(网络流,最大流) Description In the vast waters far far away, there are many islan ...

  3. hdu 4640(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 思路:f[i][j]表示一个人状态i下走到j的最小花费,dp[i][j]表示i个人在状态j下的最 ...

  4. HDU 4280 Island Transport(网络流)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=4280">http://acm.hdu.edu.cn/showproblem.php ...

  5. HDU 4640 状态压缩DP 未写完

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 解题思路: 首先用一个简单的2^n*n的dp可以求出一个人访问一个给定状态的最小花费,因为这i个 ...

  6. HDU 4280 Island Transport

    Island Transport Time Limit: 10000ms Memory Limit: 65536KB This problem will be judged on HDU. Origi ...

  7. Hdu 4280 Island Transport(最大流)

    Island Transport Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  8. HDU 4280 Island Transport(无向图最大流)

    HDU 4280:http://acm.hdu.edu.cn/showproblem.php?pid=4280 题意: 比较裸的最大流题目,就是这是个无向图,并且比较卡时间. 思路: 是这样的,由于是 ...

  9. HDU 4280 Island Transport(dinic+当前弧优化)

    Island Transport Description In the vast waters far far away, there are many islands. People are liv ...

随机推荐

  1. HDU 4119Isabella's Message2011成都现场赛I题(字符串模拟)

    Isabella's Message Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  2. MySQL数据库中的哈希加密

    数据库安全是数据库中最为重要的环节,只有确保了数据库中数据的安全,才能够更好的发挥数据库的功能,本文将为大家介绍一种很好的数据库加密方法,即哈希加密. 导读:MySQL数据库加密的方法有很多种,不同的 ...

  3. iOS集成微信支付各种坑收录

    统一下单的参数要拼接成XML格式,使用AFN请求时要对参数转义,直接传入字典给AFN无法识别(这个接口微信demo中并没有提供示例) AFHTTPRequestOperationManager *ma ...

  4. qsort函数的简单实践

    #include<stdio.h>#include<stdlib.h>#include<time.h>//利用qsort函数对10个随机数进行排序int compa ...

  5. 解决操作过快导致ajax异常的办法

    //控制点击过快ajax异常 var state = true; function test() { if (state) { state = false; var val = accMul((uCo ...

  6. [c#]控制台进度条的示例

    看到[vb.net]控制台进度条的示例 感觉很好玩,翻译成C#版. using System; using System.Collections.Generic; using System.Linq; ...

  7. 工作中遇到的浏览器差别(就不叫IE6bug了)

    1.根据ie版本写css <!--[if lt IE 8]> <style> .cntContainer{margin-top: -1px;} </style> & ...

  8. jquery1.9学习笔记 之选择器(基本元素四)

    ID选择器("#id") 描述: 选择与给出ID属性匹配的单元标签. 对于ID选择器,jquery使用JS的函数document.getElementById(),当一个标签附加到 ...

  9. 项目中redis类似MVC的使用

  10. android 集成百度地图

    一.下载百度地图为我们提供的所有DEMO. 在这里边我选的是一键下载. 二.下载后有两个项目一个是用于eclipse.另一个是android studio.我选的是android studio. 我用 ...