1389

算个简单的树形DP吧 不知道是不是数据太水 竟然一A了

就是对于当前节点有没有被选中就行选最优 有没有被选中的意思是有没有与它相连的边被选中

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 #include<vector>
 7 #include<cmath>
 8 using namespace std;
 9 #define N 100010
10 vector<int>d[N];
11 int dp[N][3],g;
12 struct node
13 {
14     int u,v;
15 }p[N];
16 int dfs(int u,int v,int f)
17 {
18     if(dp[v][f]!=-1)
19     return dp[v][f];
20     int i;
21     int s[2][2] = {0};
22     int flag =0,x=-1;
23     for(i = 0 ; i < d[v].size() ; i++)
24     {
25         int tv = d[v][i];
26         if(tv==u) continue;
27         flag = 1;
28         int s1 = dfs(v,tv,0);
29         if(f)
30         {
31             s[(i+1)%2][0] = s[i%2][0]+s1;
32         }
33         else
34         {
35             int s2 = dfs(v,tv,1)+1;
36             s[(i+1)%2][0] = s[i%2][0]+s1;
37             if(s[i%2][1]+s1<s[i%2][0]+s2)
38             {
39                 s[(i+1)%2][1] = s[i%2][0]+s2;
40                 x = tv;
41             }
42             else
43             s[(i+1)%2][1] = s[i%2][1]+s1;
44         }
45     }
46     if(!flag)
47     {
48         return dp[v][f] = 0;
49     }
50     if(x!=-1)
51     {
52         g++;
53         p[g].u = v;
54         p[g].v = x;
55     }
56     int maxz = 0;
57     for(i = 0 ; i < 2 ; i++)
58     maxz = max(maxz,max(s[0][i],s[1][i]));
59     return dp[v][f] = maxz;
60 }
61 int main()
62 {
63     int i,n,m;
64     while(cin>>n>>m)
65     {
66         memset(dp,-1,sizeof(dp));
67         for(i = 0 ; i <= n ;i++)
68         d[i].clear();
69         for(i = 1; i <= m ;i++)
70         {
71             int u,v;
72             cin>>u>>v;
73             d[u].push_back(v);
74             d[v].push_back(u);
75         }
76         dfs(-1,1,0);
77         cout<<dp[1][0]<<endl;
78         for(i = 1; i <= g ; i++)
79         cout<<p[i].u<<" "<<p[i].v<<endl;
80     }
81     return 0;
82 }

View Code

转载于:https://www.cnblogs.com/shangyu/p/3548393.html

URAL1389. Roadworks(dp)相关推荐

  1. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  2. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  3. leetcode 1269. 停在原地的方案数(dp)

    示例 1: 输入:steps = 3, arrLen = 2 输出:4 解释:3 步后,总共有 4 种不同的方法可以停在索引 0 处. 向右,向左,不动 不动,向右,向左 向右,不动,向左 不动,不动 ...

  4. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  5. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

  6. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  7. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  8. LeetCode 1223. 掷骰子模拟(DP)

    1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...

  9. LeetCode 1155. 掷骰子的N种方法(DP)

    1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...

  10. LeetCode 712. 两个字符串的最小ASCII删除和(DP,类似编辑距离)

    1. 题目 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 = "eat" ...

最新文章

  1. bp神经网络应用实例_人工智能BP神经网络学习神器——AISPACE
  2. 计算机AL教程笔记,计算机系统基础学习笔记(2)-数据的位运算操作
  3. 柴油发电机组自动控制系统工作原理
  4. MySQL + Atlas 部署读写分离
  5. DevOps案例研究:庖丁解牛,剖析Google持续交付之道
  6. 当导用模块与包的import与from的问题(模块与包的调用)
  7. Project Euler 001-006 解法总结
  8. linux解挂文件磁盘的命令,Linux学习笔记(4)磁盘分区(fdisk)、挂载与文件系统命令...
  9. PRML5-神经网络(1)
  10. 如何画好软件项目架构图?
  11. 软件测试思想者 - 软件评测师考试顺利通关
  12. android nano app,实战nanoHTTPD嵌入android app(3)
  13. Python基础(8)字符串及常用操作
  14. 定义与声明、头文件与extern总结
  15. 捆绑软件?锁定主页?这4个地方可以下载到绝对纯净的Windows系统
  16. 加油吧 !!!冲冲冲
  17. 使用微软云服务器搭建Hadoop集群
  18. [Windows实用软件推荐:1]本地搜索工具Everything
  19. 8.8 Web前端-小米商城项目实战
  20. 宝马335i手动挡和M3手动挡的对比

热门文章

  1. vue 兼容IE解决方案, Babel .babelrc
  2. 【VUE/H5】H5调起数字键盘的坑,及手写移动端键盘代码
  3. java Runtime.exec方法详解
  4. 7z的压缩包linux下如何解压软件,7z(p7zip)压缩软件在Linux下的安装和使用
  5. three.js + jquery灯光照耀js特效
  6. graphpad prism怎么添加图例_Graphpad Prism 绘制散点图详细图解
  7. ECMAScript 6 入门教程
  8. php微博批量管理工具,简单快速批量取消微博的关注
  9. 联想rd650怎么装系统win7_ThinkServer - RD650 - RAID及系统安装 - 图文
  10. 第四批入围企业公示——年度TOP100智能网联供应商评选