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#。1 数据类型,常量变量,类型转换
C#. 一.数据类型 1,字符串类型(string) .放入一串字符串,需要用""引起来. 列如: string a ="999"; 2,整型 (int). ...
- PagerSlidingTabStrip的使用
布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too ...
- grunt之入门实践
grunt 是基于nodejs的前端项目管理工具,凭借着大量优秀的插件从众多前端项目管理工具中脱颖而出. 确保先安装了nodejs 为了方便使用Grunt,应该在全局范围内安装Grunt的命令行接口( ...
- mysql中取系统当前时间
<select id="getFreightEfclInventoryList" parameterType="long" resultMap=" ...
- 完全不借助VS,编写C#控制台应用程序
(因为这个必须要借助控制台,所以必须是控制台应用程序) csc.exe是微软.NET Framework 中的C#编译器 步骤如下: 1)用记事本写一个控制台应用程序的代码,保存在E盘,test.cs ...
- 01.Editplus+Lua配置
学习一门语言有一款简单顺手的编辑工具很重要,我使用Editplus要多一点:就想能不能加上Lua支持,网上一搜还还不少.现把配置记录下来,也算做个笔记吧! Editplus版本是中文3.41(网上下吧 ...
- Animation 案例解释
Animation 案例解释: ------------摘自W3c 过度动画类型: linear:线性过渡.等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0) ease:平滑过渡.等同于贝塞尔曲 ...
- jsonp跨域请求学习笔记
前言 ajax,用苍白的话赞扬:很好. 我们可以使用ajax实现异步获取数据,减少服务器运算时间,大大地改善用户体验:我们可以使用ajax实现小系统组合大系统:我们还可以使用ajax实现前端的优化.( ...
- html meta标签属性用法集合
1.<meta name="generator" contect="">用以说明生成工具(如Microsoft FrontPage 4.0)等: 2 ...
- Java学习笔记--NIO
参考资料:http://ifeve.com/buffers/ BIO/NIO/AIO的区别联系 http://stevex.blog.51cto.com/4300375/1284437http://w ...