题意
现在有一个由
n
个节点
m
条边组成的无向图,每条边的边权
w∈{1,2}
令
d+u
表示
u
所有出边的权值和,令
d−u
表示
u
所有入边的权值和,一个点
u
是好的,当且仅当
∣d+u−d−u∣=1
给每一条边定向,使得图上好的点最多,输出任意一种方案
n,m≤3×105
题解
令
cw,u
表示点
u
边权为
w
的边的个数,sw,u
表示点
u
边权为
w
的出边的数量减去边权为
w
的入边的数量
上界
u∑[c1,umod2=1]
能够达到
考虑欧拉回路
建立新图,对于原图上一条边
(u,v,w),若
w=1,新图上有
(u,v),否则有
(u+n,v+n)
可以保证
∣sw,u∣=cw,umod2
若
c1,umod2=c2,umod2=1,还要保证
sgn(s1,u)=sgn(s2,u),连边
(u,u+n)
再添加一个节点
S,与目前度数为奇数的点连边
最后跑一遍欧拉回路定向,把边的方向对应回原图
时间复杂度为
Θ(n+m)
代码 codeforces
submission 145198606