vijos 1524 最小监视代价
背景
看到Vijos上此类型的题目较少,特地放一道上来给大家练练。
描述
由于yxy小朋友做了一些不该做的事,他被jzp关进了一个迷宫里。由于jzp最近比较忙,疏忽大意了一些,yxy可以在迷宫中任意走动。整个迷宫可以被看作是一个无向图。迷宫中有一些结点有传送点,可以让他逃离这个迷宫。jzp发明了一种机器人,可以监视迷宫中的道路,被监视的道路yxy不能通过,我们简单的认为监视一条道路的代价即为这条道路的长度。现在jzp正在忙,请你编一个程序算出使yxy无法逃离迷宫的最小监控总代价。(yxy一开始在1号结点)
格式
输入格式
第1行:两个自然数n和e,分别表示迷宫的节点数和边数。
第2至e+1行:每行三个自然数a、b和w,表示a和b之间有一条道路,长度为w。
第e+2行:一个自然数m,表示有传送点结点的个数。
第e+3行:m个自然数,表示有传送点的结点。
输出格式
一个自然数,表示最小监视总代价。
样例1
样例输入1
5 5
1 2 1
1 3 2
2 5 3
2 3 3
3 4 2
2
4 5
样例输出1
3
限制
每个测试点1s
提示
n<100,e<300,m<n
1<=a,b<=n
w<=maxint
来源
经典问题改编
最大流
#include <cstring>
#include <cstdio>
#include <queue>
#define inf 1e9
#define Max 150 using namespace std;
struct node
{
int next,to,dis;
}edge[Max*Max];
int Answer,head[Max*Max],cnt=,n,m,e,dep[Max*Max];
void add(int u,int v,int l)
{
node*w=&edge[++cnt];
w->next=head[u];
w->to=v;
w->dis=l;
head[u]=cnt;
}
bool bfs(int s,int t)
{
for(int i=;i<=n;++i) dep[i]=inf;
dep[s]=;
queue<int>q;
q.push(s);
while(!q.empty())
{
int tp=q.front();
q.pop();
for(int i=head[tp];i;i=edge[i].next)
{
int v=edge[i].to;
if(dep[v]>dep[tp]+&&edge[i].dis)
{
dep[v]=dep[tp]+;
if(v==t) return ;
q.push(v);
}
}
}
return ;
}
int dfs(int s,int t,int came_flow)
{
if(s==t||came_flow==) return came_flow;
int res=,f;
for(int i=head[s];i;i=edge[i].next)
{
int v=edge[i].to;
if(dep[v]==dep[s]+&&edge[i].dis&&(f=dfs(v,t,min(came_flow,edge[i].dis))))
{
res+=f;
came_flow-=f;
edge[i].dis-=f;
edge[i^].dis+=f;
}
if(came_flow==) break;
}
return res;
}
int dinic(int s,int t)
{
while(bfs(s,t)) Answer+=dfs(s,t,inf);
return Answer;
}
int main()
{
scanf("%d%d",&n,&e);
for(int x,y,z;e--;)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
scanf("%d",&m);
for(int x;m--;)
{
scanf("%d",&x);
add(x,n,inf);
add(n,x,inf);
}
printf("%d",dinic(,n));
return ;
}
vijos 1524 最小监视代价的更多相关文章
- [vijos P1524] 最小监视代价
历时四天(本周三至本周六),本人的第一道网络流题目终于通过了…虽然这么慢才搞懂很大程度是因为脑子笨,但是还是要吐槽一下: (1)选的这道题吧居然是无向图,对于初学者我表示呵呵,昨晚到现在一直在纠结怎么 ...
- Vijos 1456 最小总代价 (状压dp)
看到这道题n只有16,就可以想到状压dp 每个人只有经过或者没经过,那就用1表示经过,0表示没经过 但是不是当前在谁那里,所以再加一维来记录 所以f[state][i]表示在物品在i,当前的状态是st ...
- lintcode: 最小调整代价
题目 最小调整代价 给一个整数数组,调整每个数的大小,使得相邻的两个数的差小于一个给定的整数target,调整每个数的代价为调整前后的差的绝对值,求调整代价之和最小是多少. 样例 对于数组,最小的调整 ...
- 【网络流24题】 No.12 软件补丁问题(最小转移代价 最短路)
[题意] T 公司发现其研制的一个软件中有 n 个错误, 随即为该软件发放了一批共 m 个补丁程序. 每一个补丁程序都有其特定的适用环境, 某个补丁只有在软件中包含某些错误而同时又不包含另一些错误时才 ...
- 最小总代价 状压DP
描述 n个人在做传递物品的游戏,编号为1-n. 游戏规则是这样的:开始时物品可以在任意一人手上,他可把物品传递给其他人中的任意一位:下一个人可以传递给未接过物品的任意一人. 即物品只能经过同一个人一次 ...
- BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡:贪心【最小匹配代价】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3399 题意: 给你一个数列a,和一个可变换顺序的序列b(数列长度≤25000). a增加一 ...
- [程序员代码面试指南]递归和动态规划-最小编辑代价(DP)
问题描述 输入 原字符串StrOrg,目标字符串StrTarget,插入.删除.替换的编辑代价ic,dc,rc.输出将原字符串编辑成目标字符串的最小代价. 解题思路 状态表示 dp[i][j]表示把s ...
- VJP1456 最小总代价(状压)
链接 这题卡了一天 刚开始没考虑第一个传的和最后一个传的 感觉挺简单 啪啪的敲完 居然还过了17组数据.. 正解:dp数组一维保存状态 一维保存当前传到了谁 再枚举是由谁传过来的 这样可以保证正确性 ...
- vijo 1456最小总代价
题意:中文题... 题解:状态比较多,可以说是状压的基础题吧,我们定义dp[i][j],j为一个二进制数,每位0表示接触过该物品,1表示没有接触过;j表示当前物品在谁手上.递推的顺序注意一下就好 ac ...
随机推荐
- CF-805B
B. 3-palindrome time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- 2、webpack基础配置
我们需要安装webpack 还需要安装webpack cli 这两个都是我们的开发依赖 这里我们一般会加一个-D表示上线的时候不需要他们两个包 安装我们的webpack 先初始化一下,记住我们的安装依 ...
- struts2注解的作用
Struts2注解 1 Struts2注解的作用 使用注解可以用来替换struts.xml配置文件!!! 2 导包 必须导入struts2-convention-plugin-2.3.15.jar包, ...
- json 与pickle模块(序列化与反序列化))
一.什么是序列化(pickling): 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化. 序列化可以持久保存状态, 不会根据计算机断电或者重启程序,而使得之前的数据状态丢失.可以在下次程 ...
- OPENGL3_基本图元
类型 说明 GL_POINTS 单个顶点集 GL_LINES 多组双顶点线段 GL_POLYGON 单个简单填充凸多边形 GL_TRAINGLES 多组独立填充三角形 GL_QUADS 多组独立填充四 ...
- git clone 之后 , 如何复制文件到文件夹 并 上传
1. 关于 _netrc machine github.com login myid password mypassword machine bitbucket.org login myid pass ...
- jzoj5988. 【WC2019模拟2019.1.4】珂学计树题 (burnside引理)
传送门 题面 liu_runda曾经是个喜欢切数数题的OIer,往往看到数数题他就开始刚数数题.于是liu_runda出了一个数树题.听说OI圈子珂学盛行,他就在题目名字里加了珂学二字.一开始liu_ ...
- 图片美化增强AI接口调用手册
在调合合AI平台提供的图片美化增强API接口,API平台链接:https://ai.ccint.com/doc/api/crop_enhance_image, 因为有遇到一些问题,写篇博客记录一下 A ...
- Linux 软连接和硬连接(转)
1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节点 ...
- C# 面向对象之面向接口
接口的定义 与类不同的是接口用interface关键字 (1)接口中所有成员不能添加任何修饰符,默认为public,如果显示指定修饰符将会出现编译错误; (2)接口中不能包含字段.运算符重载.实例构造 ...