博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ4078 : [Wf2014]Metal Processing Plant
阅读量:6825 次
发布时间:2019-06-26

本文共 1131 字,大约阅读时间需要 3 分钟。

设$D(A)\leq D(B)$,从小到大枚举$D(A)$,双指针从大到小枚举$D(B)$。

那么对于权值不超过$D(A)$的边,可以忽略。

对于权值介于$(D(A),D(B)]$之间的边,需要满足那两个点不能都在集合$A$。

对于权值大于$D(B)$的边,需要满足那两个点不在同一个集合。

所以建图判断2-SAT是否有解即可,这可以使用压位Kosaraju算法。

时间复杂度$O(\frac{n^4}{64})$。

 

#include
#include
#define N 205using namespace std;typedef unsigned long long ll;int n,m,i,j,k,t,q[N<<1],f[N<<1],ans;struct E{int x,y,w;E(){}E(int _x,int _y,int _w){x=_x,y=_y,w=_w;}}e[N*N];inline bool cmp(const E&a,const E&b){return a.w
>6]^=1ULL<<(x&63);} int get(int x){return v[x>>6]>>(x&63)&1;}}v0,v1,g0[N<<1],g1[N<<1];inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}inline void addA(int x,int y){ g0[x].flip(y); g1[y+n].flip(x); g0[y].flip(x); g1[x+n].flip(y);}inline void addB(int x,int y){ g0[x+n].flip(y); g1[y].flip(x); g0[y+n].flip(x); g1[x].flip(y);}void dfs1(int x){ if(x
>1; sort(e+1,e+m+1,cmp); for(i=0;i
=ans||check()){ ans=min(ans,e[i].w+e[j].w); if(j)addB(e[j].x,e[j].y); if((--j)

  

转载地址:http://mgezl.baihongyu.com/

你可能感兴趣的文章
From 192.168.25.133 icmp_seq=238 Destination Host Unreachable 虚拟机ping主机不通
查看>>
上交所回应“科创板受理企业科技含量不高”:会在审核问询环节对企业进行多轮问询...
查看>>
教你如何用python操作数据库mysql ! !
查看>>
全栈必备 Log日志
查看>>
Redis命令——键(key)
查看>>
设计模式---状态模式(DesignPattern_State)
查看>>
ionic3项目实战教程 - 第11讲 ionic3个人中心界面设计
查看>>
记一次使用Ubuntu 14.04 LTS搭建FBctf平台
查看>>
领英准备好成为下一个媒体巨人了吗?
查看>>
head first python(第二章)–学习笔记
查看>>
grunt和前端模块管理工具的简单使用
查看>>
linux - command - iftop 磁盘IO查看神器
查看>>
腾讯MSDK支付接入记录
查看>>
Binary Tree Maximum Path Sum@LeetCode
查看>>
修改了一个HTML2Markdown 函数
查看>>
JXLS 2.4.0学习
查看>>
Android--listView长按修改ListView对象内容
查看>>
Html2excel 1.4.1 发布,Html 转 Excel 工具包
查看>>
精选10大机器学习开源项目 !(附链接)
查看>>
中国电信“商密云存储系统”通过国家商用密码产品鉴定
查看>>