loj 1316(spfa预处理+状压dp)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27024
题意:求0-(n-1)的经过最多的标记的点的最短路。
思路:首先我们可以spfa预处理出起点到标记的最短距离,标记的点到终点的最短距离,然后就是状压dp了,dp[state][u]表示在该状态下到达点u的最短路径。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
#define MAXN 555
#define FILL(a,b) memset(a,b,sizeof(a))
#define inf 1<<30 struct Edge{
int v,w;
Edge(int vv,int ww):v(vv),w(ww){}
}; int n,m,s,bit[<<];
int Initiate(int state)
{
int cnt=;
while(state){
cnt+=state&;
state>>=;
}
return cnt;
} int dist[][MAXN],pos[];
bool mark[MAXN];
vector<Edge>g[MAXN]; bool spfa(int vs,int dist[])
{
fill(dist,dist+n,inf);
FILL(mark,false);
queue<int>que;
que.push(vs);
dist[vs]=;
while(!que.empty()){
int u=que.front();
que.pop();
mark[u]=false;
for(int i=;i<g[u].size();i++){
int v=g[u][i].v,w=g[u][i].w;
if(dist[u]+w<dist[v]){
dist[v]=dist[u]+w;
if(!mark[v]){
mark[v]=true;
que.push(v);
}
}
}
}
return dist[n-]!=inf;
} int dp[<<][],ans1,ans2;
void Get_Dp()
{
for(int i=;i<=(<<s);i++)
for(int j=;j<=s;j++)dp[i][j]=inf;
for(int i=;i<s;i++){
int p=pos[i];
spfa(p,dist[i]);
dp[<<i][i]=dist[s][p];
}
ans1=;
ans2=dist[s][n-];
for(int state=;state<(<<s);state++){
int tmp=bit[state];
for(int i=;i<s;i++)if(state&(<<i)){
if(dist[i][n-]!=inf&&dp[state][i]!=inf){
if(tmp>ans1)ans1=tmp,ans2=dp[state][i]+dist[i][n-];
else if(tmp==ans1)ans2=min(ans2,dp[state][i]+dist[i][n-]);
for(int j=;j<s;j++)if(!(state&(<<j))){
dp[state|(<<j)][j]=min(dp[state|(<<j)][j],dp[state][i]+dist[i][pos[j]]);
}
}
}
}
printf("%d %d\n",ans1,ans2);
} int main()
{
int _case,t=;
scanf("%d",&_case);
for(int i=;i<=(<<);i++)bit[i]=Initiate(i);
while(_case--){
scanf("%d%d%d",&n,&m,&s);
for(int i=;i<=n;i++)g[i].clear();
for(int i=;i<s;i++)scanf("%d",&pos[i]);
while(m--){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
g[u].push_back(Edge(v,w));
}
printf("Case %d: ",t++);
if(!spfa(,dist[s])){
puts("Impossible");
continue;
}
Get_Dp();
}
return ;
}
loj 1316(spfa预处理+状压dp)的更多相关文章
- hdu 4568 Hunter(spfa预处理 + 状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4568 思路:首先spfa预处理出每对宝藏之间的最短距离以及宝藏到边界的最短距离,然后dp[state] ...
- UVA 1412 Fund Management (预处理+状压dp)
状压dp,每个状态可以表示为一个n元组,且上限为8,可以用一个九进制来表示状态.但是这样做用数组开不下,用map离散会T. 而实际上很多九进制数很多都是用不上的.因此类似uva 1601 Mornin ...
- loj#10172 涂抹果酱 (状压DP)
题目: #10172. 「一本通 5.4 练习 1」涂抹果酱 解析: 三进制的状压DP 经过简单的打表发现,在\(m=5\)时最多有\(48\)种合法状态 然后就向二进制一样枚举当前状态和上一层的状态 ...
- UVa 1412 Fund Management (预处理+状压DP)
题意:题意很难说清楚自己看原文,链接:UVa 1412 Fund Management 析:总体来说如果没有超时的话,这个题不是特别难,但是这个题很容易超时,主要是体现在状态转移时,很容易想到状态方程 ...
- codevs2800送外卖(floyd+状压dp)
2800 送外卖 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
- 【BZOJ-1097】旅游景点atr SPFA + 状压DP
1097: [POI2007]旅游景点atr Time Limit: 30 Sec Memory Limit: 357 MBSubmit: 1531 Solved: 352[Submit][Sta ...
- BZOJ-1087 互不侵犯King 状压DP+DFS预处理
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2337 Solved: 1366 [Submit][ ...
- Loj 6433. 「PKUSC2018」最大前缀和 (状压dp)
题面 Loj 题解 感觉挺难的啊- 状压\(dp\) 首先,有一个性质 对于一个序列的最大前缀和\(\sum_{i=1}^{p} A[i]\) 显然对于每个\(\sum_{i=p+1}^{x}A[i] ...
随机推荐
- Docker的安装配置及使用详解
基本概念 Docker 包括三个基本概念 镜像(Image) 容器(Container) 仓库(Repository) 先理解了这三个概念,就理解了 Docker 的整个生命周期. 1.docker安 ...
- question2answer论坛框架分析及web开发思考
2015年7月25日 17:31:42 星期六 一个专门做论坛的开源PHP框架, 有后台, 支持多语种 入口文件是框架根目录的index.php 他包含了/qa-include/qa-index.ph ...
- JS 基本语句
1.循环中必备的条件: 初始值 循环条件 状态改变 循环体 for(初始值 循环条件 状态改变) { 循环体 } for(var i=0;i<100;i++ ...
- 混合高斯模型:opencv中MOG2的代码结构梳理
/* 头文件:OurGaussmix2.h */ #include "opencv2/core/core.hpp" #include <list> #include&q ...
- c#指定日期格式
string TripCode = "BT"+DateTime.Now.ToString("yyyyMMddHHmmss");//出差单号
- jquery[siblings]取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合
取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合,用于筛选同辈元素的表达式 $("#pageList").click(function(){ $(this).pa ...
- delphi 控件大全(确实很全)
delphi 控件查询:http://www.torry.net/ http://www.jrsoftware.org Tb97 最有名的工具条(ToolBar)控件库,仿Office97,如TDoC ...
- iOS中NSUserDefaults详解
NSUserDefault 作为iOS中一种轻量级数据本地化方式,简单易用,经常用于存储一些应用相关属性记录,例如图书app的背景色,进度,上次阅读的书籍及相关配置信息.NSUserDefault实质 ...
- supersr--NSURLSessionConfiguration-下载进度
//// ViewController.m// 下载进度 // // Created by Super on 14/7/4. // Copyright (c) 2014年 iOS. All r ...
- [Android Pro] Gradle Tips#1-tasks
reference to : http://trickyandroid.com/gradle-tip-1-tasks/ http://blog.csdn.net/lzyzsd/article/deta ...