bzoj3135: [Baltic2013]pipesd
Description
有n个水库,m条管道。Jester会在某些管道中间凿开一个洞,让水流出来或者用水泵把水打进去。保证这个流速是偶数。对于一条管道(u, v),如果在中间凿开了一个洞让水流出来,流速是2d m^3/s,那么水库u和v失水速度为d m^3/s。同理,如果往一条管道(u, v)注水,流速为2p m^3/s,那么u和v得到水的速度是p m^3/s。
给定图的构造以及每个水库的水流的变化,问每条边的方案是否唯一。
Input
第一行:水库数量n,管道数量m (1 <= n <= 100 000, 1 <= m <= 500 000)下面n行:第i个水库的变化速度ci (-10^9 <= ci <= 10^9)接下来m行:(u, v),保证没有重边
Output
如果方案唯一,输出方案,每行一个数xi(-10^9 <= xi <= 10^9)表示第i条管道的流量变化。放水为负数,灌水为正数。否则输出0。
边看做未知数则每个点构成一个方程,保证有解,因此n<m时方案不唯一
对于一个度为1的点,与其相邻的边的答案可以被确定,因此可以以此为突破口消元,若n=m-1则最后可以全部解出,若n=m则最后剩下一个环
对于偶环,显然方案不唯一,对于奇环则可以简单地推出公式O(n)解出唯一解
#include<cstdio>
typedef long long i64;
char buf[],*ptr=buf,*pmx=buf+;
inline int g(){
if(ptr==pmx)fread(ptr=buf,,,stdin);
return *(ptr++);
}
int _(){
int x=,c=g(),f=;
while(c<)c=='-'&&(f=-),c=g();
while(c>)x=x*+c-,c=g();
return x*f;
}
int n,m;
int et[],enx[],e0[],ep=,deg[],q[],ql=,qr=,v[],e[],p=;
i64 f[],ans[],s[];
void dfs(int w,int pa){
deg[w]=-;
v[++p]=w;
for(int i=e0[w];i;i=enx[i]){
int u=et[i];
if(deg[u]==)e[p]=i>>,dfs(u,w);
else if(u!=pa&°[u]==-)e[p]=i>>;
}
}
int main(){
n=_();m=_();
if(m>n)return puts(""),;
for(int i=;i<=n;++i)f[i]=_();
for(int i=,a,b;i<m;++i){
a=_();b=_();
++deg[a];++deg[b];
et[ep]=b;enx[ep]=e0[a];e0[a]=ep++;
et[ep]=a;enx[ep]=e0[b];e0[b]=ep++;
}
for(int i=;i<=n;++i)if(deg[i]==)q[++qr]=i;
while(ql!=qr){
int w=q[++ql];
deg[w]=;
for(int i=e0[w];i;i=enx[i]){
int u=et[i];
if(!deg[u])continue;
ans[i>>]=f[w]*;
f[u]-=f[w];
if(==--deg[u])q[++qr]=u;
}
}
for(int w=;w<=n;++w)if(deg[w]==){
dfs(w,);
if(p%==)return puts(""),;
v[p+]=v[];
for(int i=;i<=p;++i)s[i]=s[i-]+(i&?f[v[i+]]:-f[v[i+]]);
for(int i=;i<=p;++i)ans[e[i]]=(s[p]-s[i-]*)*(i&?:-);
break;
}
for(int i=;i<=m;++i)printf("%lld\n",ans[i]);
return ;
}
bzoj3135: [Baltic2013]pipesd的更多相关文章
- 【BZOJ 3136】 3136: [Baltic2013]brunhilda (数论?)
3136: [Baltic2013]brunhilda Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 238 Solved: 73[Submit][ ...
- 【BZOJ 3133】 3133: [Baltic2013]ballmachine (线段树+倍增)
3133: [Baltic2013]ballmachine Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 148 Solved: 66 Descri ...
- BZOJ_3133_[Baltic2013]ballmachine_堆+倍增
BZOJ_3133_[Baltic2013]ballmachine_堆+倍增 Description 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树 ...
- [BZOJ3133] [Baltic2013]ballmachine(树上倍增+堆)
[BZOJ3133] [Baltic2013]ballmachine(树上倍增+堆) 题面 有一个装球机器,构造可以看作是一棵树.有下面两种操作: 从根放入一个球,只要下方有空位,球会沿着树滚下.如果 ...
- BZOJ3133[Baltic2013]ballmachine
题目描述 https://www.lydsy.com/JudgeOnline/problem.php?id=3133 题解 还是分两个操作来说吧. 先看第一个操作,放球,可以发现,对于祖先节点和后代节 ...
- [Baltic2013]ballmachine BZOJ3133
分析: 我们考虑,因为每次放置的时候,都是向子树中含有的编号最小的哪一个走,那么放置的顺序是固定的,我们将边以to的子树最小排序,之后得到的出栈序就是球的放入顺序.目测可以使用堆来实现,线段树也能实现 ...
- bzoj3137: [Baltic2013]tracks
炸一看好像很神仙的样子,其实就是个sb题 万年不见的1A 但是我们可以反过来想,先选一个起点到终点的联通块,然后这联通块后面相当于就能够走了,继续找联通块 然后就能发现直接相邻的脚步相同的边权为0,否 ...
- bzoj3136: [Baltic2013]brunhilda
这个题为什么会放在数据结构啊 首先因为有决策包容性,对于一个n每次必然选择一个n%p最大的p,令n减n%p 设fi表示i变成0的步数的话,同样我们可以知道f是有单调性的 假如fd能转移到fk,首先d一 ...
- bzoj3134: [Baltic2013]numbers
稍微用脑子想一想,要是一个回文数,要么s[i]==s[i+1]要么s[i]==s[i+2]就可以实锤了 所以多开两维表示最近两位选的是什么数就完了 注意前导0 #include<cstdio&g ...
随机推荐
- UI学习笔记---第八天
UINavigationController的用法 界面间传值 UInavigationController继承于UIViewController,以栈的方式管理所控制的师徒控制器,至少要有一个被 ...
- 215. Kth Largest Element in an Array
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...
- poj 2299 树状数组求逆序对数+离散化
Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 54883 Accepted: 20184 ...
- ES6 — 字符串String
ES6对字符串新增了一些函数和操作规范.下面我们来看ES6中对字符串新加的特性. 1.模版字符串 (即用反引号定义的字符串) 传统的字符串拼接通过我们使用'+'号与变量连接.例如: let name= ...
- spark优化之优化数据结构
概序: 要减少内存的消耗,除了使用高效的序列化类库以外,还有一个很重要的事情,就是优化数据结构.从而避免Java语法特性中所导致的额外内存的开销,比如基于指针的Java数据结构,以及包装类型. 有一个 ...
- HDU-4533 威威猫系列故事——晒被子(区间更新)
题目大意:在平面直角坐标系的第一象限中,给出n个矩形(可能重叠).有m次询问,每次询问点(t,t)的左下方的正方形区域中矩形的总面积(重叠部分重叠几次就得统计几次). 题目分析:线段树的叶子节点x维护 ...
- 论文笔记之:Fully-Convolutional Siamese Networks for Object Tracking
gansh Fully-Convolutional Siamese Network for Object Tracking 摘要:任意目标的跟踪问题通常是根据一个物体的外观来构建表观模型.虽然也取得了 ...
- The EM Algorithm
EM是我一直想深入学习的算法之一,第一次听说是在NLP课中的HMM那一节,为了解决HMM的参数估计问题,使用了EM算法.在之后的MT中的词对齐中也用到了.在Mitchell的书中也提到EM可以用于贝叶 ...
- 谷歌浏览器chrome与firefox的冲突(未解之谜)
那年,公司开发了一套在线制作电子书的系统 e-textbook. 我负责小学电脑科教材在线题目的制作. 利用 ps制作剪裁好图片,导入系统,制作题目,并通知同事添加代码. 检测时,却发现有一道图片拖放 ...
- PHP-网页跳转的几种方式
本文总结了跳转到指定网页的几种方式. 1.利用PHP的header函数Location响应头, header是用来向浏览器返回HTTP响应头(详细请看HTTP协议详解) <?php header ...