LOJ#2239. 「CQOI2014」危桥

就是先把每条边正着连一条容量为2的边,反着连一条容量为2的边

显然如果只有一个人走的话,答案就是一个源点往起点连一条容量为次数×2的边,终点往汇点连一个次数×2的边,跑最大流看是否满流即可

两个人的话由于两个人的路径可能相交,有可能从\(a_1\)走到了\(b_2\)

统计一遍 \(a_1,b_{1}\)为源点,\(a_{2},b_{2}\)为汇点的情况

再统计一遍\(a_{1},b_{2}\)为源点,\(a_{2},b_{1}\)为汇点的情况

这两种都合法的话才能证明可以走到

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define ba 47
#define MAXN 1005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 +c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
int N;
int a[3],b[3];
int S,T,dis[55];
char g[55][55];
struct node {
int to,next,cap;
}E[100005];
int head[55],sumE = 1;
void add(int u,int v,int c) {
E[++sumE].to = v;
E[sumE].next = head[u];
E[sumE].cap = c;
head[u] = sumE;
}
void addtwo(int u,int v,int c) {
add(u,v,c);add(v,u,0);
}
queue<int> Q;
bool BFS() {
Q.push(S);
memset(dis,0,sizeof(dis));
dis[S] = 1;
while(!Q.empty()) Q.pop();
Q.push(S);
while(!Q.empty()) {
int u = Q.front();Q.pop();
if(u == T) return true;
for(int i = head[u] ; i; i = E[i].next) {
int v = E[i].to; if(E[i].cap > 0 && !dis[v]) {
dis[v] = dis[u] + 1;
if(v == T) return true;
Q.push(v); }
}
}
return dis[T] != 0;
}
int dfs(int u,int aug) {
if(u == T) return aug;
int flow = 0;
for(int i = head[u] ; i; i = E[i].next) {
int v = E[i].to;
if(dis[v] == dis[u] + 1) {
int t = dfs(v,min(aug - flow,E[i].cap));
flow += t;
E[i].cap -= t;
E[i ^ 1].cap += t;
if(flow == aug) return flow;
}
}
return flow;
}
int Dinic() {
int res = 0;
while(BFS()) {
while(int d = dfs(S,1e9)) {
res += d;
}
}
return res;
}
void create() {
sumE = 1;memset(head,0,sizeof(head));
for(int i = 1 ; i <= N ; ++i) {
for(int j = 1 ; j <= N ; ++j) {
if(g[i][j] == 'N') addtwo(i,j,1e9);
else if(g[i][j] == 'O') addtwo(i,j,2);
}
}
}
bool Process() {
create();
addtwo(S,a[0],2 * a[2]);
addtwo(S,b[0],2 * b[2]);
addtwo(a[1],T,2 * a[2]);
addtwo(b[1],T,2 * b[2]);
return Dinic() >= 2 * (a[2] + b[2]);
}
void Solve() {
for(int i = 0 ; i < 3 ; ++i) read(a[i]);
++a[0];++a[1];
for(int i = 0 ; i < 3 ; ++i) read(b[i]);
++b[0];++b[1];
for(int i = 1 ; i <= N ; ++i) scanf("%s",g[i] + 1);
S = N + 1;T = N + 2;
bool f = 1;
f &= Process();
swap(b[0],b[1]);
f &= Process();
if(f) puts("Yes");
else puts("No");
}
int main(){
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
while(scanf("%d",&N) != EOF) {
Solve();
}
}

【LOJ】#2239. 「CQOI2014」危桥的更多相关文章

  1. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  2. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  3. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  4. Loj #3089. 「BJOI2019」奥术神杖

    Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...

  5. Loj #2542. 「PKUWC2018」随机游走

    Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...

  6. Loj #3059. 「HNOI2019」序列

    Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k ...

  7. Loj #3056. 「HNOI2019」多边形

    Loj #3056. 「HNOI2019」多边形 小 R 与小 W 在玩游戏. 他们有一个边数为 \(n\) 的凸多边形,其顶点沿逆时针方向标号依次为 \(1,2,3, \ldots , n\).最开 ...

  8. Loj #3055. 「HNOI2019」JOJO

    Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 ...

  9. Loj 3058. 「HNOI2019」白兔之舞

    Loj 3058. 「HNOI2019」白兔之舞 题目描述 有一张顶点数为 \((L+1)\times n\) 的有向图.这张图的每个顶点由一个二元组 \((u,v)\) 表示 \((0\le u\l ...

随机推荐

  1. 18.4.1 考试解题报告 P71

    题目:https://files.cnblogs.com/files/lovewhy/problem.pdf 偷偷摘来dalao题面. P71竞赛时间:???? 年?? 月?? 日??:??-??:? ...

  2. HTML基础要点归纳

    一.开发环境 常用的HTML编辑器有Sublime Text.Hbuild.Dreamweare.以及vs code.pycharm等都可以.我目前在用的就是Sublime text3和Hbuild两 ...

  3. D3D常用数学函数

    D3DXCOLOR* D3DXColorAdd   //两个颜色的组合值D3DXCOLOR* WINAPI D3DXColorAdjustContrast( //调整颜色对比度D3DXCOLOR *p ...

  4. scrapy框架之log日志

    scrapy中的debug信息 在scrapy中设置log 1.在settings中设置log级别,在settings.py中添加一行: Scrapy提供5层logging级别: CRITICAL - ...

  5. EGL Driver message (Critical) eglInitialize: No available renderers.

    使用Python的selenium库进行自动化巡检.并将相对应的数据保存 环境: Windows Embedded Standard Python 2.7.16 selenium 3.141.0 [0 ...

  6. ie和vuex的兼容

    vuex requires a Promise polyfill in this browser. 在ie中的报错 需要安卓babel-polyfill,  然后在webpack.base.confi ...

  7. CF1217A

    CF1217A 题意: 配exp点经验给力量str和智力int,求有多少种分配情况使str比int高 解法: 打表找规律,没了. CODE; #include <bits/stdc++.h> ...

  8. 【Linux】ssh命令行下多任务前后台切换

    原文:https://my.oschina.net/huxuanhui/blog/13844 我们都知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务.而不能让 ...

  9. error C2086: “int WINGDIAPI”: 重定义

    1>------ 已启动生成: 项目: OSG_3_1_osgViewer应用基础, 配置: Debug x64 ------1>cl : 命令行 warning D9002: 忽略未知选 ...

  10. python内置数据结构

    数据类型: 数值型 int float complex bool 序列对象 字符串 str 列表 list 元组 tuple 键值对 集合 set 字典dict 数值型: int.float.comp ...