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 ...
随机推荐
- c++11 : Local and Unnamed Types as Template Arguments
In N2402, Anthony Williams proposes that local types, and unnamed types be usable as template argume ...
- DC综合环境的一些概念
DC综合环境的一些概念 启动文件 .synopsys_dc_setup 采用Tcl格式,包含工艺库的路径信息和其他环境变量 不同位置启动顺序 1.Synopsys安装目录 2.用户家目录 3.项目工作 ...
- CSS3新特性(阴影、动画、渐变、变形、伪元素等) CSS3与页面布局学习总结——CSS3新特性(阴影、动画、渐变、变形、伪元素等)
目录 一.阴影 1.1.文字阴影 1.2.盒子阴影 二.背景 2.1.背景图像尺寸 2.2.背景图像显示的原点 三.伪元素 3.1.before 3.2.after 3.3.清除浮动 四.圆角与边 ...
- 初探CSS
css基本框架 index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- RecycleView 瀑布流滑动移位
RecycleView StaggeredLayoutManager(瀑布流)滑动的时候,默认会出现item移动的问题,需以下来个步骤来解决: 附上StaggeredLayoutManager中的一段 ...
- Cordova自定义插件
项目原因需要自定义Cordova插件,下面把实现过程记录以便将来查阅.工程为Eclipse下的Android工程,该工程已经引入Cordova.Cordova版本4.0.2.1.定义插件类OpenAp ...
- include,include_once,require,require_once的区别
1.include,require在其被调用的位置处包含一个文件. 2.include_once,require_once函数的作用与include相同,不过它会首先验证是否已包含该文件.如果已经包含 ...
- Backbone的RESTFUL API 解释
RESTFUL API 从服务器获取模型:collection.fetch();//发送GET请求 地址为collection.url; 存取模型至服务器: model.save();//发送PUT请 ...
- jquery1.9学习笔记 之选择器(基本元素五)
多种元素选择器 jQuery("selector1,selector2,selectorN") 例子: <!doctype html> <html lang=' ...
- python比较两个列表
两个列表,随机产生4个不相等的数,计算一下,相同位置上的元素相等的个数,用k1表示. b列表中的元素在a列表中,但位置不相同,有多少个,用k2表示. 例如: a=[0, 4, 7, 3]b=[7, 1 ...