
电子眼(树形DP)
发布日期:2021-05-08 21:48:33
浏览次数:14
分类:精选文章
本文共 1547 字,大约阅读时间需要 5 分钟。
电子眼
Description
中山市石一个环境优美、气候宜人的小城市。因为城市的交通并不繁忙,市内的道路网很稀疏。准确地说,中山市有N-1条马路和N个路口,每条马路连接两个路口,每两个路口之间最多只有一条马路。作为一条交通网络,显然每两个路口之间都是可达的。为了更好地管理中山市的交通,市长决定在一些路口加装电子眼,用来随时监视路面情况。这些装在路口的电子眼能够监视所有连接到这个路口的马路。现在市长想知道最少需要在多少个路口安装电子眼才能监视所有的马路。市长已经把所有的路口都编上了1~N的号码。 给你中山市的地图,你能帮忙吗? Input 输入文件traffic.in的第1行包括一个数字N(1<=N<=100000),表示中山市的路口数。接下来N-1行,每行两个数字x_i和y_i,用来描述N-1条路所连接的两个路口的编号。 Output 输出最少需要安装电子眼的数量。 Sample Input 3 1 2 1 3 Sample Output 1分析
这题我们可以用动态规划(DP)来做 可以根据来做 我们要采用邻接表void add(int x,int y)//链表建立 { tot++; a[tot].x=x;//自己 a[tot].to=y;//与它相连的路口 a[tot].next=head[x];//自己 head[x]=tot;//让别人更好找自己 }
动态转移方程也差不多
f[ss][0]=f[ss][0]+f[a[i].to][1];//取 f[ss][1]=min(f[a[i].to][0],f[a[i].to][1])+f[ss][1];//不取
但这题,有个坑,就是这个无向图会形成环
所以我们还要判断是否重复if(b[a[i].to]==1)continue;//可能会形成环 b[a[i].to]=1;
最后一样,要判断取和不取谁更大
cout<
注意:我这里0是取,1是不取
AC代码#includeusing namespace std;int n,x1,y1,tot,head[100005],f[100005][2],b[100005];struct stu//结构体 { int x,to,next;}a[100005];void add(int x,int y)//链表建立 { tot++; a[tot].x=x;//自己 a[tot].to=y;//与它相连的路口 a[tot].next=head[x];//自己 head[x]=tot;//让别人更好找自己 }void dp(int ss){ f[ss][1]=1;//初值 f[ss][0]=0; b[ss]=1; for(int i=head[ss];i;i=a[i].next)//翻译为"i=head[ss];while(i!=0){执行语句;i=a[i].next;}"就是从头找下去 { if(b[a[i].to]==1)continue;//可能会形成环 b[a[i].to]=1; dp(a[i].to);//递归 f[ss][0]=f[ss][0]+f[a[i].to][1];//取 f[ss][1]=min(f[a[i].to][0],f[a[i].to][1])+f[ss][1];//不取 }}int main(){ cin>>n; for(int i=1;i<=n-1;i++) { cin>>x1>>y1; add(x1,y1);//无向图,需要两个都互相连接 add(y1,x1); } dp(1);//从1开始 cout<
谢谢欣赏
发表评论
最新留言
不错!
[***.144.177.141]2025年04月10日 07时34分32秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】
2021-05-09
P1379 八数码难题 ( A* 算法 与 IDA_star 算法)
2021-05-09
算法学习笔记: 珂朵莉树
2021-05-09
Codeforces Round #664 题解(A ~ C)
2021-05-09
Problem A - Sequence with Digits (数学推导)
2021-05-09
Problem 330A - Cakeminator (思维)
2021-05-09
LeetCode75 颜色分类 (三路快排C++实现与应用)
2021-05-09
docker基础:容器生命周期管理命令
2021-05-09
Shell脚本学习指南
2021-05-09
C#开发BIMFACE系列35 服务端API之模型对比6:获取模型构建对比分类树
2021-05-09
C# 规范建议
2021-05-09
C语言+easyX图形库的推箱子实现
2021-05-09
反汇编-流程控制语句-2-循环控制语句分析
2021-05-09
调试vs2019代码的流程
2021-05-09
游戏外挂基础-概述
2021-05-09
脱壳与加壳-加壳-6-代码实现加密导入表
2021-05-09
Typora配置PicGo时,提示Failed to fetch
2021-05-09
ASP.NET CORE MVC 实现减号分隔(Kebab case)样式的 URL
2021-05-09
bcolz的新操作
2021-05-09
Linux的s、t、i、a权限(转)
2021-05-09