正题


题目大意

nnn个点的一棵树,每条边一个权值为0或1和一个目标权值(0或1或者没有限制)。每次可以将一个路径上的权值取反,求最小翻转数量和最小翻转路径长度。


解题思路

首先我们可以从序列的类似问题上知道一条边不会被翻转超过一次,所以问题变为了求最少的路径覆盖所有需要翻转的点。考虑如何dpdpdp,我们知道一个点如果被奇数条需要翻转的边相连,那么该点必定需要作为其中一条路径的起点,那么需要翻转的数量就是奇数入度点的数量除以2

设fi,0/1f_{i,0/1}fi,0/1​表示dpdpdp到iii点时,该点连向父节点的翻转或者不翻转(如果有必定的要求就让另一个dpdpdp值为0)时的答案二元组,然后进行dpdpdp即可


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10,inf=2147483647/3;
struct node{int to,next,w;
}a[N*2];
int n,tot,ls[N];
pair<int,int> f[N][2];
pair<int,int> operator +(pair<int,int> x,pair<int,int> y)
{return make_pair(x.first+y.first,x.second+y.second);}
void addl(int x,int y,int w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;return;
}
void dfs(int x,int fa,int k){pair<int,int> f0(0,0),f1(inf,inf);for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa)continue;dfs(y,x,a[i].w);pair<int,int> l=f0,r=f1;f0=min(l+f[y][0],r+f[y][1]);f1=min(r+f[y][0],l+f[y][1]);}if(k==0||k>=2)f[x][0]=min(f0,f1+make_pair(1,0));if(k==1||k>=2)f[x][1]=min(f0+make_pair(1,1),f1+make_pair(0,1));return;
}
int main()
{int size = 256 << 20; //250Mchar*p=(char*)malloc(size) + size;__asm__("movl %0, %%esp\n" :: "r"(p) );scanf("%d",&n);for(int i=1;i<n;i++){int x,y,w,d;scanf("%d%d%d%d",&x,&y,&w,&d);addl(x,y,w^d);addl(y,x,w^d);}memset(f,0x3f,sizeof(f));dfs(1,1,0);printf("%d %d",f[1][0].first/2,f[1][0].second);
}

nssl1469-W【dp】相关推荐

  1. 【DP】【期望】$P1850$换教室

    [DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...

  2. Bailian2760 数字三角形【DP】

    2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...

  3. NUC1131 Triangle【DP】

    Triangle 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 图1表示一个数字三角形. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ...

  4. LeetCode:完全平方数【279】【DP】

    LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...

  5. 【DP】序列 题解

    [DP]序列 题解 序列 题目 一个长度为kkk的整数序列bbb 1,bbb 2,-,bkbkbk(1≤bbb 1≤bbb 2≤-≤bkbkbk≤NNN)称为"好序列"当且仅当后一 ...

  6. 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...

    1 build 1.1 Description 从前有一个王国,里面有n 座城市,一开始两两不连通.现在国王将进行m 次命令,命令可 能有两种,一种是在u 和v 之间修建道路,另一种是询问在第u 次命 ...

  7. 【NOIP模拟题】【DP】【LIS】【中缀表达式】2016.11.15 第一题 小L的二叉树 题解

    小L的二叉树 小L的二叉树 题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. [题目描述] 在计算机科学中,二 ...

  8. 【SHOI2007】【dp】书柜的尺寸

    [题目描述] Tom不喜欢那种一字长龙式的大书架,他只想要一个小书柜来存放他的系列工具书.Tom打算把书柜放在桌子的后面,这样需要查书的时候就可以不用起身离开了.显然,这种书柜不能太大,Tom希望它的 ...

  9. 【USACO-Chapter1-1.1】【DP】Broken Necklace

    [题目描述] 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 1 2 1 2r b b r b r r br ...

  10. 【NOIP模拟题】【DP】【同余最短路】【暴力剪枝】2016.11.15 第二题 小L的牛栏 题解

    小L的牛栏 [题目描述] 小L通过泥萌的帮助,成功解决了二叉树的修改问题,并因此写了一篇论文, 成功报送了叉院(羡慕不?).勤奋又勤思的他在研究生时期成功转系,考入了北京大学光华管理学院!毕业后,凭着 ...

最新文章

  1. 年轻人的第一只机器狗,只要1.6万
  2. 用计算机探索规律反思,《用计算器探索规律》教学反思
  3. cocos2dx[3.2](5) ——入口类AppDelegate.cpp
  4. (chap6 Http首部) 请求首部字段 AuthorizationExpectFromHostIf-Match
  5. java事件类_关于Java事件类的一些思考
  6. Qt文档阅读笔记-Q_CLASSINFO官方解析与实例
  7. python3.5 安装PyCrypto
  8. windows 安装PyAudio库
  9. 设置自动会计时,常数位置提示APP-FND-00804错误,解决方法
  10. python批量保存网页为pdf_利用Python把网页内容转换为pdf格式文件,批量下载到本地!...
  11. H5大番薯(源码+数据库脚本)
  12. shel脚本中批量替换文件名
  13. Matlab save colormap
  14. xynuoj 1919 三国志
  15. java使用网易企业邮箱,发送邮件失败
  16. mysql 对 GENERATED 字段更新时候报错
  17. Vivado、modelsim、VHDL错误集锦
  18. Adobe Acrobat Reader DC 2019 (19.8)
  19. qrCode二维码的生成和识别
  20. 什么是设备管理系统?设备管理系统解决方案有何优势?

热门文章

  1. twitter mysql_twitter-mysql改进点
  2. 5 thinkpad 黑将评测_王中林院士团队黑科技:80秒,将PM 2.5降至0!把森林氧吧搬回家!...
  3. python类变量共享吗_第7.12节 可共享的Python类变量
  4. vst3插件_Steinberg发布新的VST 3.7 SDK,音乐软件开发者速来围观
  5. 7-21 求前缀表达式的值 (25 分)(思路详解)
  6. Numpy中数组创建函数的辨析
  7. C++ 学习之旅(8)——一文搞懂指针、引用、函数参数的传值调用、指针调用和引用调用
  8. [mybatis]映射文件_参数处理_#取值时指定参数相关规则
  9. prim算法和kruskal算法(C语言)
  10. [剑指offer]面试题35:第一个只出现一次的字符