问题描述

LG2770

LOG6122


题解

教训:关掉流同步之后就不要用其他输入输出方式了。

拆点。

两个拆点之间连\((1,1)\),其他连\((1,0)\)


\(\mathrm{Code}\)

#include<bits/stdc++.h>
using namespace std; void read(int &x){
x=0;char ch=1;int fh;
while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
if(ch=='-') ch=getchar(),fh=-1;
else fh=1;
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
x*=fh;
} const int maxn=203;
const int maxm=1000003; const int INF=0x3f3f3f3f;
int flag;
int n,m;
map<string,int>mp;
string s[maxn],s1,s2; int Head[maxn],Next[maxm],to[maxm],w[maxm],co[maxm],tot=1;
int S,T,maxflow,ans; void add(int x,int y,int flow,int cost){
to[++tot]=y,Next[tot]=Head[x],Head[x]=tot,w[tot]=flow,co[tot]=cost;
} int dis[maxn],pre[maxm],now[maxn];
bool vis[maxn]; void dfs1(int x){
cout<<s[x]<<endl;
vis[x]=1;
for(int i=Head[x];i;i=Next[i]){
int y=to[i];
if(y>n&&y<=2*n&&w[i]==0){
dfs1(y-n);break;
}
}
} void dfs2(int x){
vis[x]=1;
for(int i=Head[x];i;i=Next[i]){
int y=to[i];
if(y>n&&y<=2*n&&w[i]==0&&!vis[y-n]){
dfs2(y-n);break;
}
}
cout<<s[x]<<endl;
} bool spfa(){
memset(dis,0xcf,sizeof(dis)),memset(vis,0,sizeof(vis));memset(pre,0,sizeof(pre));
now[S]=INF;queue<int>q;q.push(S);vis[S]=1;dis[S]=0;
while(!q.empty()){
int x=q.front();vis[x]=0;q.pop();
for(int i=Head[x];i;i=Next[i]){
int y=to[i],len=w[i],cost=co[i];
if(!len||dis[y]>=dis[x]+cost) continue;
dis[y]=dis[x]+cost,now[y]=min(now[x],len);
pre[y]=i;
if(!vis[y]){q.push(y);vis[y]=1;}
}
}
return dis[T]!=(int)0xcfcfcfcf;
} void upd(){
maxflow+=now[T],ans+=dis[T]*now[T];
int p=T;
while(p!=S){
int k=pre[p];
w[k]-=now[T],w[k xor 1]+=now[T];
p=to[k xor 1];
}
} int main(){
ios::sync_with_stdio(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>s[i];mp[s[i]]=i;
}
S=n*2+1,T=S+1;
add(S,n+1,INF,0);add(n+1,S,0,0);
add(n,T,INF,0);add(T,n,0,0);
for(int i=1;i<=n;i++){
if(i!=1&&i!=n) add(i+n,i,1,1),add(i,i+n,0,-1);
else add(i+n,i,2,1),add(i,i+n,0,-1);
}
for(int i=1;i<=m;i++){
cin>>s1;cin>>s2;
int x=mp[s1],y=mp[s2];
if(x>y) swap(x,y);
if(x==1&&y==n) flag=1;
add(x,y+n,1,0),add(y+n,x,0,0);
}
while(spfa()) upd();
if(maxflow==2) cout<<ans-2<<endl;
else if(maxflow==1&&flag){
cout<<2<<endl;cout<<s[1]<<endl<<s[n]<<endl<<s[1]<<endl;return 0;
}
else{
cout<<"No Solution!"<<endl;return 0;
}
memset(vis,0,sizeof(vis));
dfs1(1);dfs2(1);
return 0;
}

LG2770/LOJ6122 航空路线问题 费用流 网络流24题的更多相关文章

  1. cogs_14_搭配飞行员_(二分图匹配+最大流,网络流24题#01)

    描述 http://cojs.tk/cogs/problem/problem.php?pid=14 有一些正飞行员和副飞行员,给出每个正飞行员可以和哪些副飞行员一起飞.一架飞机上必须一正一副,求最多多 ...

  2. 洛谷P2770 航空路线问题(费用流)

    题意 $n$个点从左向右依次排列,有$m$条双向道路 问从起点到终点,再从终点回到起点,在经过的点不同的情况下最多能经过几个点 Sol 首先,问题可以转化为求两条互不相交的路径,使得点数最多 为了满足 ...

  3. LG2766 最长不下降子序列问题 最大流 网络流24题

    问题描述 LG2766 题解 \(\mathrm{Subtask 1}\) 一个求最长不下降子序列的问题,发现\(n \le 500\),直接\(O(n^2)\)暴力DP即可. \(\mathrm{S ...

  4. 【题解】【网络流24题】航空路线问题 [P2770] [Loj6122]

    [题解][网络流24题]航空路线问题 [P2770] [Loj6122] 传送门:航空路线问题 \([P2770]\) \([Loj6122]\) [题目描述] 给出一张有向图,每个点(除了起点 \( ...

  5. 【网络流24题】最长k可重线段集(费用流)

    [网络流24题]最长k可重线段集(费用流) 题面 Cogs的数据有问题 Loj 洛谷 题解 这道题和最长k可重区间集没有区别 只不过费用额外计算一下 但是,还是有一点要注意的地方 这里可以是一条垂直的 ...

  6. 【网络流24题】最长k可重区间集(费用流)

    [网络流24题]最长k可重区间集(费用流) 题面 Cogs Loj 洛谷 题解 首先注意一下 这道题目里面 在Cogs上直接做就行了 洛谷和Loj上需要判断数据合法,如果\(l>r\)就要交换\ ...

  7. Libre 6013 「网络流 24 题」负载平衡 (网络流,最小费用最大流)

    Libre 6013 「网络流 24 题」负载平衡 (网络流,最小费用最大流) Description G 公司有n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使n ...

  8. Libre 6012 「网络流 24 题」分配问题 (网络流,费用流)

    Libre 6012 「网络流 24 题」分配问题 (网络流,费用流) Description 有n件工作要分配给n个人做.第i个人做第j件工作产生的效益为\(c_{ij}\).试设计一个将n件工作分 ...

  9. Libre 6011 「网络流 24 题」运输问题 (网络流,最小费用最大流)

    Libre 6011 「网络流 24 题」运输问题 (网络流,最小费用最大流) Description W 公司有m个仓库和n个零售商店.第i个仓库有\(a_i\)个单位的货物:第j个零售商店需要\( ...

随机推荐

  1. 用arthas查看JVM已加载的类及方法信息

    1.sc:“Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息,这个命令支持的参数有 [d].[E].[f] 和 [x:]. [d] 输出当前类的详细信 ...

  2. 【2019.8.14 慈溪模拟赛 T2】黑心老板(gamble)(2-SAT)

    \(2-SAT\) 考虑每个点只能选择\(R\)或\(B\),可以看作选\(0\)或\(1\). 然后对于给出的关系式,若其中一个位置满足关系式,另两个位置就必须不满足关系式,这样就可以对于每个关系式 ...

  3. 从项目中理解let和const为什么如此重要

    变量声明 变量声明方式 伴随js诞生的var // 语法 var varName = value var a = 1 // 这样子你就得到了一个变量 var缺陷场景分析 var specialUser ...

  4. [LOJ 6433][PKUSC 2018]最大前缀和

    [LOJ 6433][PKUSC 2018]最大前缀和 题意 给定一个长度为 \(n\) 的序列, 求把这个序列随机打乱后的最大前缀和的期望乘以 \(n!\) 后对 \(998244353\) 取膜后 ...

  5. 构建Shiny应用

    构建Shiny应用 1.什么是Shiny? Shiny是一个R的应用包,帮助用户构建可交互的web应用.它可以结合HTML和CSS代码,以及R 语言的运算能力. 2.下载R Shiny 下载R包 in ...

  6. 单个视频播放控制&默认横屏播放

    一.视频列表中控制只允许一个视频播放 // 获取DOM中所有的video标签 var videoTags = document.querySelectorAll('video'); // 控制播放的视 ...

  7. vue中toggle切换的3种写法

    前言:查看下面代码,在任意编辑器中直接复制粘贴运行即可 1:非动态组件(全局注册2个组件,借用v-if指令和三元表达式) <!DOCTYPE html> <html> < ...

  8. RestController 能不能通过配置关闭

    https://stackoverflow.com/questions/29958231/can-a-spring-boot-restcontroller-be-enabled-disabled-us ...

  9. [新概念英语] Lesson 12 : GOODBYE AND GOOD LUCK

    Lesson 12 : GOODBYE AND GOOD LUCK New words and expressions : luck (n) 运气 例句 You're not having much ...

  10. opencv代码片段合集

    个人笔记 长期更新 #### 创建一个图片 import cv2 # Not actually necessary if you just want to create an image. impor ...