LibreOJ NOI Round #2 Day 1

T1:

别被定义弄晕了

反着做,A->1/A+B

取倒数没法做,所以变成a/b,维护2*2的矩阵

区间?不用线段树,不用倍增

存在逆矩阵,直接前缀积

注意左乘右乘方向

T2

模拟费用流

经典老鼠和洞的问题

序列:从左往右扫,

到了老鼠i,wi加入堆,

到了洞j,找权值最大的未匹配老鼠或者已经匹配的洞k,如果valk+vj>0,更新ans,pop,然后把-vj加入堆

外向树:可并堆进行上述操作

而本题带修

(52)60pts做法:

https://www.luogu.org/blog/i207M/libreoj-noi-round-2-xie-ti-bao-gao

相当于模拟动态加边费用流,

建图方式就是树上直接建,S到miner,gold到T

加入一个miner,会和匹配的miner、未匹配的gold产生匹配

疯狂DFS走有流量的边到这些点,选择最大的

加入gold,和未匹配的miner、匹配的gold产生匹配

这里DFS,如果反向边有流量才走,因为实际在反向增广

如果有匹配并且贡献>0,暴力把整个路径流量改变

匹配和未匹配的miner和gold用2个堆维护

由于可能加入的费用过大,会造成正环

一般机械费用流要消正环

但是其实无所谓,正环只会产生在miner-S-miner之间,以及gold-T-gold之间

和我们的人工方法一致

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define pb push_back
#define solid const auto &
#define enter cout<<endl
#define pii pair<int,int>
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){
char ch;x=;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);(fl==true)&&(x=-x);}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}
namespace Modulo{
const int mod=;
il int ad(int x,int y){return x+y>=mod?x+y-mod:x+y;}
il int sub(int x,int y){return ad(x,mod-y);}
il int mul(int x,int y){return (ll)x*y%mod;}
il void inc(int &x,int y){x=ad(x,y);}
il void inc2(int &x,int y){x=mul(x,y);}
il int qm(int x,int y=mod-){int ret=;while(y){if(y&) ret=mul(x,ret);x=mul(x,x);y>>=;}return ret;}
template<class ...Args>il int ad(const int a,const int b,const Args &...args) {return ad(ad(a,b),args...);}
template<class ...Args>il int mul(const int a,const int b,const Args &...args) {return mul(mul(a,b),args...);}
}
//using namespace Modulo;
namespace Miracle{
const int N=+;
const int inf=0x3f3f3f3f;
int n,m;
ll ans;
priority_queue<ll>q[N][];
//0: matched miner ; no match gold
//1: matched gold ; no match miner
struct node{
int nxt,to;
int w,c;
}e[*N];
int du[N];
int hd[N],cnt=;
void add(int x,int y,int w,int c){
e[++cnt].nxt=hd[x];
e[cnt].to=y;e[cnt].w=w;e[cnt].c=c;
hd[x]=cnt; e[++cnt].nxt=hd[y];
e[cnt].to=x;e[cnt].w=;e[cnt].c=-c;
hd[y]=cnt;
}
int pre[N];
ll mx;
int id;
void dfs(int x,int fa,ll d,int tp){
if(!q[x][tp].empty()){
if(q[x][tp].top()+d>mx){
mx=q[x][tp].top()+d;
id=x;
}
}
for(reg i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(y==fa) continue; if(tp==){
if(e[i].w) pre[y]=i,dfs(y,x,d+e[i].c,tp);
}else{
if(e[i^].w) pre[y]=i,dfs(y,x,d+e[i^].c,tp);
}
}
}
void wrk(int x,int v,int tp){
mx=1ll*-0x3f3f3f3f3f3f3f3f,id=;
dfs(x,,,tp); if(mx+v>){
ans+=mx+v;
ll val=q[id][tp].top();
q[id][tp].pop();
q[id][tp^].push(-val); q[x][tp].push(-v);
if(tp==){
while(id!=x){
e[pre[id]].w--;
e[pre[id]^].w++;
id=e[pre[id]^].to;
}
}else{
while(id!=x){
e[pre[id]].w++;
e[pre[id]^].w--;
id=e[pre[id]^].to;
}
}
}else{
q[x][tp^].push(v);
}
}
int main(){
rd(n);rd(m);
int x,y,z;
for(reg i=;i<n;++i){
rd(x);rd(y);rd(z);
add(x,y,inf,z);
++du[y];
}
// int rt=0;
//for(reg i=1;i<=n;++i){if(du[i]==0) rt=i;} int op,v;
while(m--){
rd(op);rd(x);rd(v);
--op;
wrk(x,v,op);
printf("%lld\n",ans);
}
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
*/

100pts:

miner往上跳到最高点,子树最大值就是答案

gold就是到根的链的所有轻儿子连通块内的最大值

树剖维护一下,找连通块,线段树pushup时候考虑中间边有没有,就好了

在写了在写了

T3:

好题

https://loj.ac/article/1779

没有大于号限制是好算的.

容斥的话,枚举i最后连续的不满足的大于号

分治NTT

dp0=1.题解打错了

最新文章

  1. IOS RunLoop面试题
  2. win7与virtualbox中centos文件共享
  3. 聊聊 virtualenv 和 virtualenvwrapper 实践
  4. UESTC_秋实大哥去打工 2015 UESTC Training for Data Structures&lt;Problem G&gt;
  5. 关于html5的几个新标签在IE9之前不支持的解决办法
  6. RE模块疑问
  7. Android开发之Intent.Action 各种Action的常见作用
  8. Linux下MySQL的数据文件存放位置
  9. [GNU] 喝一杯咖啡, 写一写 Makefile
  10. C#生成树形结构泛型类
  11. raise ValueError(&quot;Cannot convert {0!r} to Excel&quot;.format(value))
  12. 周末时间学习Linux
  13. solrj管理索引库
  14. 前端实现实时通讯-----ajax长连接
  15. (原创)一个简洁通用的调用DLL函数的帮助类
  16. bat cmd dos 通过拖拽参数 上传 截取拖拽上传文件名
  17. vue进行路由拼图的使用案例
  18. 20155217 2016-2017-2 《Java程序设计》第10周学习总结
  19. Xcode变量概览-summary
  20. 从零开始玩转JMX(三)——Model MBean

热门文章

  1. Python 入门 之 包
  2. 仿优酷项目—orm
  3. CSS3彩色进度条加载动画 带进度百分比
  4. redis 学习(9)-- redis 客户端 -- redis-py
  5. MySQL性能优化(五):分表
  6. Yii2 常用代码集合
  7. javascript--获取一个页面各个标签的数量
  8. 多线程学习-- part 1 Thread
  9. 更改命令行,完全显示hostname
  10. cmd完成拷贝文件,并生成两个快捷脚本