【Luogu2458】保安站岗(动态规划)
来源:互联网 发布:coc大本升级数据 编辑:程序博客网 时间:2024/04/30 19:14
题面
题目描述
五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序。
已知整个地下超市的所有通道呈一棵树的形状;某些通道之间可以互相望见。总经理要求所有通道的每个端点(树的顶点)都要有人全天候看守,在不同的通道端点安排保安所需的费用不同。
一个保安一旦站在某个通道的其中一个端点,那么他除了能看守住他所站的那个端点,也能看到这个通道的另一个端点,所以一个保安可能同时能看守住多个端点(树的结点),因此没有必要在每个通道的端点都安排保安。
编程任务:
请你帮助超市经理策划安排,在能看守全部通道端点的前提下,使得花费的经费最少。
输入输出格式
输入格式:
第1行 n,表示树中结点的数目。
第2行至第n+1行,每行描述每个通道端点的信息,依次为:该结点标号i(0
输入输出样例
输入样例#1:
6
1 30 3 2 3 4
2 16 2 5 6
3 5 0
4 4 0
5 11 0
6 5 0
输出样例#1:
25
说明
样例说明:在结点2,3,4安置3个保安能看守所有的6个结点,需要的经费最小:25
题解
题目大意是,给定一棵树,每一个节点可以控制和他相邻的节点,问最少用多少代价可以控制整棵树
因为每个节点只能够控制相邻的节点
所以设
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<set>#include<map>#include<vector>#include<queue>using namespace std;#define MAX 1600#define INF 1e9inline int read(){ int x=0,t=1;char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')t=-1,ch=getchar(); while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar(); return x*t;}struct Line{ int v,next;}e[MAX<<1];int h[MAX],cnt=1;int W[MAX],n;int f[MAX][3];inline void Add(int u,int v){ e[cnt]=(Line){v,h[u]}; h[u]=cnt++;}void Plus(int &a,int b){ a+=b; if(a>INF)a=INF;}void dfs(int u,int ff){ f[u][1]=W[u]; for(int i=h[u];i;i=e[i].next) { int v=e[i].v; if(v==ff)continue; dfs(v,u); Plus(f[u][0],min(f[v][0],f[v][1])); Plus(f[u][1],min(f[v][0],min(f[v][1],f[v][2]))); Plus(f[u][2],min(f[v][0],f[v][1])); } int tot=f[u][0],ret=INF; for(int i=h[u];i;i=e[i].next) { int v=e[i].v; if(v==ff)continue; ret=min(ret,tot-min(f[v][0],f[v][1])+f[v][1]); } f[u][0]=ret;}int main(){ n=read(); for(int i=1;i<=n;++i) { int bh=read(); W[bh]=read(); int m=read(); while(m--) { int v=read(); Add(bh,v);Add(v,bh); } } dfs(1,0); printf("%d\n",min(f[1][1],f[1][0])); return 0;}
阅读全文
1 0
- 【Luogu2458】保安站岗(动态规划)
- [SDOI2006]保安站岗
- 【洛谷2458】【SDOI2006】保安站岗(树形DP)
- 站岗问题
- 【动态规划(一)】动态规划基础
- 动态规划(1)
- 动态规划(2)
- 动态规划(3)
- 动态规划(4)
- HDOJ2046(动态规划)
- 动态规划(one)
- 动态规划(读书笔记)
- Pearls(动态规划)
- skiing(动态规划)
- HDU4001(动态规划)
- 作业题 (动态规划)
- Zipper(动态规划)
- 滑雪(动态规划)
- nginx以非root用户启动
- 如何更好地利用我们公众号
- 页面的换入
- NOIP要注意什么
- 笔记 JS中的call()方法和apply()方法用法总结
- 【Luogu2458】保安站岗(动态规划)
- Python 第三方库的安装
- 编程小结
- 如何在局域网访问Tomcat项目
- JavaScript思考之一:函数的基本概念
- NOIP2008(普及组)T4 立体图
- 机器学习的分类及过程
- Coursera-Deep Learning Specialization 课程之(四):Convolutional Neural Networks: -weak2编程作业
- 种一棵链式存储的树