Disillusioning #1 水题+原题赛(被虐瞎)
https://vijos.org/tests/542c04dc17f3ca2064fe7718
好一场 水题 比赛啊
t1直接上暴力费用流10分QAQ,虽然一开始我觉得可以不用的,直接dfs可以得出最大流,但是写撮了就放弃了。
t2直接上暴力又是10分QAQ,虽然本来我就不会。。
t3直接上暴力还写撮了。。。。。。。。sad story
orz 小岛 orz zyf
t1:P1885 Phorni(Disillusioning)
听zyf讲完后无限仰慕。。。。最大流的确可以dfs出来orzQAQ。然后费用流就麻烦了。。
因为是树型的,显然流量是全部流向叶子的,而且叶子到根有且只有一条路径!sigh。。。这样就能保证我选了一条费用最小的路径增广一定是最优!!贪心。。。
sad。
那么我用树剖+线段树维护路径最小,至于官方题解的lct实在是仰慕orz。虽然以前听说过lct优化的网络流,但是今天第一次遇到orz。有时间去看看。。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << (#x) << " = " << (x) << endl
#define printarr2(a, b, c) for1(_, 1, b) { for1(__, 1, c) cout << a[_][__]; cout << endl; }
#define printarr1(a, b) for1(_, 1, b) cout << a[_] << '\t'; cout << endl
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; }
#define rdm(i, x) for(int i=ihead[x]; i; i=e[i].next)
#define lc x<<1
#define rc x<<1|1
#define lson l, m, lc
#define rson m+1, r, rc
#define MID (l+r)>>1 const int N=100005, oo=~0u>>1;
int n, ihead[N], cnt, d[N], id[N], fa[N], top[N], son[N], size[N], tot, num, cs[N], upd[N];
struct ED { int to, next, cap, cost; }e[N];
struct TR { int mn, tag; }t[N<<2];
struct ID { int c, id; }a[N];
void add(int u, int v, int c, int w) { e[++cnt].next=ihead[u]; ihead[u]=cnt; e[cnt].to=v; e[cnt].cap=c; e[cnt].cost=w; }
void dfs(int x, int c, int t) {
d[x]=0; int y; cs[x]=t;
rdm(i, x) {
y=e[i].to;
dfs(y, e[i].cost+c, e[i].cap);
d[x]+=min(d[y], e[i].cap);
}
if(!ihead[x]) d[x]=oo, a[++num].c=c, a[num].id=x;
}
void dfs1(int x) {
size[x]=1;
rdm(i, x) {
int y=e[i].to; fa[y]=x;
dfs1(y);
if(size[y]>size[son[x]]) son[x]=y;
size[x]+=size[y];
}
}
void dfs2(int x, int t) {
id[x]=++tot; top[x]=t; upd[tot]=cs[x]; //dbg(x); dbg(tot);
if(son[x]) dfs2(son[x], t);
rdm(i, x) if(e[i].to!=son[x]) dfs2(e[i].to, e[i].to);
}
void pushup(int x) { t[x].mn=min(t[lc].mn, t[rc].mn); }
void pushdown(int x) {
if(t[x].tag) {
int y=t[x].tag;
t[x].tag=0;
t[lc].mn+=y; t[rc].mn+=y;
t[lc].tag+=y; t[rc].tag+=y;
}
}
void build(int l, int r, int x) {
t[x].mn=oo;
if(l==r) { t[x].mn=upd[l]; return; }
int m=MID;
build(lson); build(rson);
pushup(x);
}
void update(int l, int r, int x, int L, int R, int k) {
pushdown(x);
if(L<=l && r<=R) {
t[x].tag+=k;
t[x].mn+=k;
return;
}
int m=MID;
if(L<=m) update(lson, L, R, k); if(m<R) update(rson, L, R, k);
pushup(x);
}
int query(int l, int r, int x, int L, int R) {
pushdown(x);
if(L<=l && r<=R) return t[x].mn;
int m=MID, ret=oo;
if(L<=m) ret=query(lson, L, R); if(m<R) ret=min(ret, query(rson, L, R));
return ret;
}
int getmin(int x) {
int ret=oo;// dbg(x);
while(top[x]!=1) {
ret=min(ret, query(1, n, 1, id[top[x]], id[x]));
x=fa[top[x]];
}
ret=min(ret, query(1, n, 1, 1, id[x])); //dbg(ret);
return ret;
}
void change(int x, int k) {
while(top[x]!=1) {
update(1, n, 1, id[top[x]], id[x], k);
x=fa[top[x]];
}
update(1, n, 1, 1, id[x], k);
}
bool cmp(const ID &a, const ID &b) { return a.c<b.c; } int main() {
read(n);
rep(i, n-1) {
int u=getint(), v=getint(), c=getint(), w=getint();
add(u, v, c, w);
}
dfs(1, 0, oo);
dfs1(1); dfs2(1, 1); build(1, n, 1);
sort(a+1, a+1+num, cmp);
int flow=d[1], ans=0;
//for1(i, 1, cnt)
for1(i, 1, num) {
int f=min(flow, getmin(a[i].id)); // dbg(f); dbg(a[i].id);
ans+=f*a[i].c;
change(a[i].id, -f);
flow-=f; if(flow==0) break;
}
printf("%d\n%d\n", d[1], ans);
return 0;
}
无限仰膜zyf神犇,千古神犇zyf!
Disillusioning #1 水题+原题赛(被虐瞎)的更多相关文章
- NOIP2018初赛普及组原题&题解
NOIP2018初赛普及组原题&题解 目录 NOIP2018初赛普及组原题&题解 原题&答案 题解 单项选择题 第$1$题 第$2$题 第$3$题 第$4$题 第$5$题 第$ ...
- 2019.3.16 noiac的原题模拟赛
RT,这太谔谔了,我不承认这是模拟赛 但是虽然是搬了三道题,题目本身也还能看,就这么着吧 (怎么机房里就我一道原题都没做过啊 T1 CF24D Broken Robot 比较简单地列出式子之后,我们发 ...
- [原题复现][2020i春秋抗疫赛] WEB blanklist(SQL堆叠注入、handler绕过)
简介 今天参加i春秋新春抗疫赛 一道web没整出来 啊啊啊 好垃圾啊啊啊啊啊啊啊 晚上看群里赵师傅的buuoj平台太屌了分分钟上线 然后赵师傅还分享了思路用handler语句绕过select过滤.. ...
- Rectangles(第七届ACM省赛原题+最长上升子序列)
题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1255 描述 Given N (4 <= N <= 100) rec ...
- (各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)
刚才把最后的10道题又看了下.也发上来吧. 以下给出试题.和我对题目的一些理解 前10道题地址 (各个公司面试原题)在线做了一套CC++综合測试题.也来測一下你的水平吧(一) 11.设已经有A,B,C ...
- NOIP原题 斗地主(20190804)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下:3<4&l ...
- [CF676C]Vasya and String(尺取法,原题)
题目链接:http://codeforces.com/contest/676/problem/C 原题题解链接:http://www.cnblogs.com/vincentX/p/5405468.ht ...
- NOIP2016原题终结测试(2017081801)
NOIP2016还有几道原题没有写掉,今天就一并布置掉. 答案的问题,有部分会先放到NOIP题解中,是单独发布的. 最后会汇总放在答案中,各位不要急. 还有,后期会有原创题测试,这个不急,反正11月才 ...
- #LOJ2564 SDOI2018 原题识别 主席树
转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/9057297.html 原题链接: 今天考试考了前天的SDOI考题 天啊我菜爆,只有T2拿了30分 然后考试后半 ...
随机推荐
- IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token
本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...
- Java程序的结构
1.由一个或多个独立的类组成: 2.最多一个公有类 3.源代码文件名必须与类名相同 4.类由一个或多个方法组成,其中公有类中的main()方法作为程序的入口. 注:javaSE中一定有main方法. ...
- 算法笔记_071:SPFA算法简单介绍(Java)
目录 1 问题描述 2 解决方案 2.1 具体编码 1 问题描述 何为spfa(Shortest Path Faster Algorithm)算法? spfa算法功能:给定一个加权连通图,选取一个 ...
- 运行maven pom.xml文件后编译环境变为jdk1.5
idea中运行pom.xml文件后,将编译环境变成了1.5,造成一系列的编译问题很是不方便. 以下是解决方法: 在"pom.xml"里加入如下代码: <properties& ...
- dmesg 时间转换脚本
https://linuxaria.com/article/how-to-make-dmesg-timestamp-human-readable perl脚本 #!/usr/bin/perl use ...
- jquery 实现菜单的下拉菜单
实现效果如图: 源码: 到此下载
- Android App补丁更新
上一周比较忙,忙的不可开交,写的文章也就两篇,在此希望大家见谅.这周呢,突然闲下来了,有时间了,就重构了下代码,捣鼓点前卫的技术,沉淀沉淀.所以呢,今天就分享下这几天研究的东西. 移动互联网主打的就是 ...
- Hacker - 世界上第一个黑客
http://juliet.iteye.com/blog/176525凯文·米特尼克,1964年生于美国加州的洛杉矶. 13岁时他对电脑着了迷,掌握了丰富的计算机知识和高超的操作技能,但却因为用学校的 ...
- django inspectdb
使用inspectdb --通过已有数据库表生成 model.pyinspectdb辅助工具检查你的settings文件指向的数据库,决定你表示你的表的Django模型并打印Python模型代码到标 ...
- android http post 请求与 json字符串
一.目标 android客户端发送一个json格式的http的请求,期望得到服务端的一个json反馈. 1. 客户端发送的json格式为: {"data" : "valu ...