[JZOJ5391]【NOIP2017提高A组模拟9.26】卡常题
来源:互联网 发布:广场舞视频下载软件 编辑:程序博客网 时间:2024/05/22 01:55
Description
ρ有一个二分连通无向图,X 方点、Y 方点均为n个(编号为1 ~ n)。
这个二分图比较特殊,每一个Y 方点的度为2,一条黑色边,一条白色边。
所有黑色边权值均为a ,所有白色边权值均为b 。
选择一个X 方点,代价为连接的所有边的权值之和。
激活一个Y 方点,需要选择至少一个与之相邻的X 方点。
现在,ρ想激活每个Y 方点,他想知道最小的总代价。
不过ρ很善良,他给你开了O2 优化。
这样你就不会被卡常了。
当然,除非你真的连读入优化都不想写,或者常数真的丑死。20%的数据:n <= 20。
40%的数据:n <=10^3。
另外 10%的数据:a = b =1。
另外20%的数据:保证每个X 方点连接的边颜色相同。
另外 10%的数据:保证原图是一个大小为2*n的环。
100%的数据:n <=10^6,a,b <=100,保证无重边。
Solution
转化一下题意,把每个Y方点看成一条边连接两个点。
那么原图就变成X方点构成的一个环套外向树了,每条边两个端点至少选一个。
随便删掉环上的一条边,以其中一个端点为根树形DP,记录一下另一个端点的状态即可。
注意读入优化。
Code
#include <cstdio>#include <cstring>#include <cmath>#include <iostream>#include <cstdlib>#include <algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)#define N 1000005using namespace std;int nt[2*N],fs[N],dt[2*N],pr[N],n,m,a,b,rt,rq,fx[2*N],f[N][2][2],rw,s1[N];bool bz[N];int read(int &n){ char ch=' ';int q=0,w=1; for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar()); if(ch=='-')w=-1,ch=getchar(); for(;ch>='0' && ch<='9';ch=getchar())q=q*10+ch-48;n=q*w;return n;}void dfs(int k,int fw){ for(int i=fs[k];i;i=nt[i]) { int p=dt[i]; if(i!=fx[fw]) { if(bz[p]) rt=p,rq=k,rw=i; else bz[p]=1,dfs(p,i); } }}void link(int x,int y){ nt[++m]=fs[x]; dt[fs[x]=m]=y;}void dp(int k,int fw){ f[k][1][0]=f[k][1][1]=s1[k]; for(int i=fs[k];i;i=nt[i]) { int p=dt[i]; if(i!=fx[fw]&&i!=rw&&i!=fx[rw]) { dp(p,i); f[k][0][0]+=f[p][1][0]; f[k][0][1]+=f[p][1][1]; f[k][1][0]+=f[p][0][0]; f[k][1][1]+=f[p][0][1]; } } if(k==rq) f[k][0][1]=f[k][1][1]; f[k][0][0]=min(f[k][0][0],f[k][1][0]); f[k][0][1]=min(f[k][0][1],f[k][1][1]);}int main(){ cin>>n>>a>>b; memset(s1,0,sizeof(s1)); fo(i,1,n) { int x,y; read(x),read(y); link(x,y); s1[x]+=a,s1[y]+=b; fx[m]=m+1,fx[m+1]=m; link(y,x); } memset(f,0,sizeof(f)); bz[1]=1; dfs(1,0); dp(rt,0); printf("%d\n",min(f[rt][1][0],f[rt][0][1]));}
阅读全文
0 0
- [JZOJ5391]【NOIP2017提高A组模拟9.26】卡常题
- JZOJ 5391. 【NOIP2017提高A组模拟9.26】卡常题
- JZOJ 5389. 【NOIP2017提高A组模拟9.26】解梦
- 【JZOJ 5390】【NOIP2017提高A组模拟9.26】逗气
- 【jzoj5389】【NOIP2017提高A组模拟9.26】【解梦】
- [JZOJ5390]【NOIP2017提高A组模拟9.26】逗气
- JZOJ5390. 【NOIP2017提高A组模拟9.26】逗气
- JZOJ 5390. 【NOIP2017提高A组模拟9.26】逗气
- 【NOIP2017提高A组模拟9.26】逗气
- JZOJsenior.5389.【NOIP2017提高A组模拟9.26】解梦
- A【NOIP2017提高组模拟12.18】
- 【JZOJ4928】【NOIP2017提高组模拟12.18】A
- 【NOIP2017提高组模拟12.18】A
- 【JZOJ4928】【NOIP2017提高组模拟12.18】A
- 【NOIP2017提高A组模拟7.7】图
- 【NOIP2017提高A组模拟7.13】abcd
- 区间【NOIP2017提高A组模拟7.10】
- 【NOIP2017提高A组模拟8.22】密码
- activity的启动模式,startactivity的过程
- Opencv图像识别从零到精通(8)-----灰度直方图
- Mongodb 3.2 开启密码认证
- Remove Duplicates from Sorted List II
- 堆、栈和堆栈的区别(转载)
- [JZOJ5391]【NOIP2017提高A组模拟9.26】卡常题
- 在centos7上安装无线网卡
- 使用Element-ui的Table时表格不能显示问题
- 树剖模板
- excel数据格式化输出
- 直方图中最大矩形面积
- 外观模式
- Hibernate框架的概述:ORM&
- Vue项目 二、依赖安装以及基本配置