题解

一道环套树的最小点覆盖题目,所谓环套树就是有在 \(n\) 个点 \(n\) 条边的无向联通图中存在一个环

我们可以发现其去掉一条环上的边后就是一棵树

那么对于此题,我们把所有 \(x\) 方点当点 \(y\) 方点当边,随便找一条环上的边删掉,然后分别从此边的两个端点做树形 \(dp\)

对于一条边上的两个点,我们一定要选一个,但不需要都选,类似例题

所以方程很好推,\(dp_{i,0}\) 表示不选 \(i\) 后覆盖 \(i\) 子树的最小费用,\(dp_{i,0}\) 表示选 \(i\) 后覆盖 \(i\) 子树的最小费用

\[dp_{x,0}=\sum_v^{v\in son_x}dp_{v,1}
\]
\[dp_{x,1}=\sum_v^{v\in son_x}\min(dp_{v,0},dp_{v,1})
\]

最后取两个端点中值最小的,因为我们也要覆盖被断开的边,所以端点必须要选取一个

Code
#include<bits/stdc++.h>
#define ri register signed
#define p(i) ++i
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
template<typename T>inline void read(T &x) {
ri f=1;x=0;register char ch=gc();
while(ch<'0'||ch>'9') {if (ch=='-') f=0;ch=gc();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
x=f?x:-x;
}
}
using IO::read;
namespace nanfeng{
#define cmax(x,y) ((x)>(y)?(x):(y))
#define cmin(x,y) ((x)>(y)?(y):(x))
#define FI FILE *IN
#define FO FILE *OUT
static const int N=1e6+7;
int dp[N][2],first[N],cst[N],vis[N],bk1,bk2,t=1,n,a,b;
struct edge{int v,nxt;}e[N<<1];
inline void add(int u,int v) {
e[t].v=v,e[t].nxt=first[u],first[u]=t++;
e[t].v=u,e[t].nxt=first[v],first[v]=t++;
}
void dfs_pre(int x,int fa) {
if (vis[x]) {bk1=x,bk2=fa;return;}
vis[x]=1;
for (ri i(first[x]),v;i;i=e[i].nxt) {
if ((v=e[i].v)==fa) continue;
dfs_pre(v,x);
}
}
void dfs(int x,int fa) {
dp[x][0]=0,dp[x][1]=cst[x];
for (ri i(first[x]),v;i;i=e[i].nxt) {
if ((v=e[i].v)==fa||x==bk1&&v==bk2||x==bk2&&v==bk1) continue;
dfs(v,x);
dp[x][0]+=dp[v][1];
dp[x][1]+=cmin(dp[v][1],dp[v][0]);
}
}
inline int main() {
// FI=freopen("nanfeng.in","r",stdin);
// FO=freopen("nanfeng.out","w",stdout);
read(n),read(a),read(b);
for (ri i(1),v1,v2;i<=n;p(i)) {
read(v1),read(v2);
cst[v1]+=a,cst[v2]+=b;
add(v1,v2);
}
dfs_pre(1,0),dfs(bk1,0);
ri tmp=dp[bk1][1];
dfs(bk2,0);
tmp=cmin(tmp,dp[bk2][1]);
printf("%d\n",tmp);
return 0;
}
}
int main() {return nanfeng::main();}

NOIP 模拟 $13\; \text{卡常题}$的更多相关文章

  1. NOIP 模拟 $13\; \text{玄学题}$

    题解 题如其名,是挺玄学的. 我们发现每个值是 \(-1\) 还是 \(1\) 只与它的次数是奇是偶有关,而 \(\sum_j^{j\le m}d(i×j)\) 又只与其中有多少个奇数有关 对于 \( ...

  2. NOIP 模拟 $13\; \text{工业题}$

    题解 本题不用什么推式子,找规律(而且也找不出来) 可以将整个式子看成一个 \(n×m\) 矩阵 考虑 \(f_{i,j}\),它向右走一步给出 \(f_{i,j}×a\) 的贡献,向下走一步给出 \ ...

  3. NOIP模拟测试39,思维禁锢专场「工业题·玄学题·卡常题」

    工业题 题解 抱歉,题解没时间写了 代码 #include<bits/stdc++.h> using namespace std; #define ll long long #define ...

  4. BZOJ 3595: [Scoi2014]方伯伯的Oj Splay + 动态裂点 + 卡常

    Description 方伯伯正在做他的Oj.现在他在处理Oj上的用户排名问题. Oj上注册了n个用户,编号为1-”,一开始他们按照编号排名.方伯伯会按照心情对这些用户做以下四种操作,修改用户的排名和 ...

  5. Noip模拟13 2021.7.13:再刚题,就剁手&&生日祭

    T1 工业题 这波行列看反就非常尴尬.....口糊出所有正解想到的唯独行列看反全盘炸列(因为和T1斗智斗勇两个半小时...) 这题就是肯定是个O(n+m)的,那就往哪里想,a,b和前面的系数分开求,前 ...

  6. Codeforces 986D - Perfect Encoding(FFT+爪巴卡常题)

    题面传送门 题意:给出 \(n\),构造出序列 \(b_1,b_2,\dots,b_m\) 使得 \(\prod\limits_{i=1}^mb_i\geq n\),求 \(\sum\limits_{ ...

  7. [luogu1972][bzoj1878][SDOI2009]HH的项链【莫队+玄学卡常】

    题目大意 静态区间查询不同数的个数. 分析 好了,成功被这道题目拉低了AC率... 打了莫队T飞掉了,真的是飞掉了QwQ. 蒟蒻想不出主席树的做法,就换成了莫队... 很多人都不知道莫队是什么... ...

  8. BZOJ3286 Fibonacci矩阵 矩阵 快速幂 卡常

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3286 题意概括 n,m,a,b,c,d,e,f<=10^1000000 题解 神奇的卡常题目 ...

  9. [luogu T71973]卡常者π酱

    [luogu T71973]卡常者π酱 题意 给定一个长度为 \(n\) 的字符串, 要求将字符串分割为若干段, 每一段要么是一个字符要么是前面几段的并的子串. 如果某一段是一个单独字符, 则产生 \ ...

随机推荐

  1. Jmeter监控服务器CPU,Memory,Disk,Network性能指标

    本文主要说一下如何通过JMeter插件来监控服务器CPU.内存.磁盘.网络等相关资源. 一.下载 第一种方案: 首先进入网址https://jmeter-plugins.org/downloads/o ...

  2. 【多线程】C++ 互斥锁(mutex)的简单原理分析

    多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序.一般情况下,分为两种类型的多任务处理:基于进程和基于线程. 1)基于进程的多任务处理是程序的并发执行. 2)基于线程 ...

  3. Raspberry pi 3b+ 安装dotnet5 VSCode Remote-SSH 远程开发

    前言 VSCode 安装Remote-SSH 配置好树莓派 VSCode 自带SSH控制台 终端输入命令 下载&安装 net5 下载wget https://dotnetcli.azureed ...

  4. 微信小程序云开发-云存储-上传单个视频到云存储并显示到页面上

    一.wxml文件 <!-- 上传视频到云存储 --> <button bindtap="chooseVideo" type="primary" ...

  5. python 实现自动部署测试环境

    预设条件 产品运行在Linux CentOS6 X64上 python3,Djanggo,Cherrypy安装好手动安装过程 登录服务器 检查是否有以前的版本的产品在运行,有,停掉 如果有原来的代码包 ...

  6. python中的abstractmethod

    # -*- coding: utf-8 -*- from abc import ABC ,abstractclassmethod from collections import namedtuple ...

  7. 第十九篇 -- QTableWidget的使用

    QTableWidget的一些常用方法 下面两个类可以根据自己的情况自定义. 单元格类型的类: class CellType(Enum): ctKey = 1000 ctPath = 1001 ctI ...

  8. endnote x9.3.3 for windows安装教程

    EndNote X9.3.3 是一款非常nice的实用型文献管理软件,EndNote X9功能极其强劲,便捷好用.本文提供EndNote X9.3.3安装破解激活教程.方法,内附EndNote x9. ...

  9. 【SpringCloud微服务实战】搭建企业级应用开发框架(一):架构说明

    SpringCloud分布式应用微服务系统架构图: SpringCloud分布式应用微服务系统组件列表: 微服务框架组件:Spring Boot2 + SpringCloud Hoxton.SR8 + ...

  10. GooseFS助力大数据业务数倍提升计算能力

    前言 GooseFS是由腾讯云推出的一款分布式缓存方案,主要针对包括需要缓存加速的数据湖业务场景,提供基于对象存储COS服务的近计算端数据加速层. GooseFS 基于开源大数据缓存方案 Alluxi ...