hdu 4640 Island and study-sister
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的更多相关文章
- hdu 4640 Island and study-sister(状态压缩dp)
先处理前两个学长到达各个点所需要的最少时间,在计算前两个学长和最后一个学长救出所有学妹的最少时间. #include<stdio.h> #include<string.h> # ...
- HDU 4280 Island Transport(网络流,最大流)
HDU 4280 Island Transport(网络流,最大流) Description In the vast waters far far away, there are many islan ...
- hdu 4640(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 思路:f[i][j]表示一个人状态i下走到j的最小花费,dp[i][j]表示i个人在状态j下的最 ...
- HDU 4280 Island Transport(网络流)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=4280">http://acm.hdu.edu.cn/showproblem.php ...
- HDU 4640 状态压缩DP 未写完
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 解题思路: 首先用一个简单的2^n*n的dp可以求出一个人访问一个给定状态的最小花费,因为这i个 ...
- HDU 4280 Island Transport
Island Transport Time Limit: 10000ms Memory Limit: 65536KB This problem will be judged on HDU. Origi ...
- Hdu 4280 Island Transport(最大流)
Island Transport Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- HDU 4280 Island Transport(无向图最大流)
HDU 4280:http://acm.hdu.edu.cn/showproblem.php?pid=4280 题意: 比较裸的最大流题目,就是这是个无向图,并且比较卡时间. 思路: 是这样的,由于是 ...
- HDU 4280 Island Transport(dinic+当前弧优化)
Island Transport Description In the vast waters far far away, there are many islands. People are liv ...
随机推荐
- Linux驱动设备中的并发控制
一.基本概念 二.中断屏蔽 三.原子操作 四.自旋锁 五.信号量 六.互斥体 七.自旋锁与信号量的比较 Linux设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发的访问会导致竞态,即使 ...
- JQuery 获取checkbox被选中的值
html代码 <ul id="dxbox"> <li><input type=" ...
- 内容提供者 ContentResolver 数据库 示例 -1
MainActivity public class MainActivity extends ListActivity { private TextView tv_info; priv ...
- C#socket通讯两个最经典错误解决方案
1.经典错误之 无法访问已释放的对象. 对象名:“System.Net.Sockets.Socket” (1).问题现场 (2).问题叙述 程序中的某个地方调用到了socket.close ...
- 关于.net根目录路径的问题
今天做了一个项目,用了url重写,但是在本地目录是localhost/BK/index.aspx,而其他目录也必须带bk,不带的话就找不到页面,(iis里正常) 应该主目录去掉bk,设置方法,右击网站 ...
- Zookeeper+Kafka+Storm+HDFS实践
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. Hadoop一般用在离线的分析计算中,而storm区别于hadoop,用在实时的流式计算中,被广泛用来 ...
- 关于在Java代码中写Sql语句需要注意的问题
最近做程序,时不时需要自己去手动将sql语句直接写入到Java代码中,写入sql语句时,需要注意几个小问题. 先看我之前写的几句简单的sql语句,自以为没有问题,但是编译直接报错. String st ...
- Swift--控制流与oc不同的地方
1.For-in循环中... for index in 1...5 { print("\(index) times 5 is \(index * 5)") } for _ in 1 ...
- 东软实训4-JDBC连接数据库
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- 菜鸟做HTML5小游戏 - 翻翻乐
记录下开放过程.做小游戏开发,又要跨平台,flash又不支持iPhone,html5是最好的选择. 先看看最后效果: 好了,开始demo. 1.准备工作: 图片素材(省略...最后代码一起打包) 了解 ...