问题描述

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. vue.js 使用 v-text 和 v-html

    v-text:转义输出 v-html:不转义输出 值得一说的是 如果直接使用{{html}}的话会直接转义 看代码: <!doctype html> <html lang=" ...

  2. 详解Redis基本命令

    当redis环境搭建结束后,接下来需要掌握并了解redis的一些相关命令,本篇文章主要从实际操作的层面来与大家分享redis基本命令, 具体包括:Redis五大基本类型命令(Strings,Lists ...

  3. 探索ASP.Net Core 3.0系列四:在ASP.NET Core 3.0的应用中启动时运行异步任务

    前言:在本文中,我将介绍ASP.NET Core 3.0 WebHost的微小更改如何使使用IHostedService在应用程序启动时更轻松地运行异步任务. 翻译 :Andrew Lock   ht ...

  4. 1+x证书Web前端开发中级理论考试(试卷1)

    2019年下半年 Web前端开发中级 理论考试 (考试时间19:00-20:30 共150分钟,测试卷1) 本试卷共3道大题,满分100分. 请在指定位置作答. 一.单选题(每小题2分,共30小题,共 ...

  5. 海边拾贝-B-优秀博客/网站

    记下若干优秀博客,方便后期检索.会不定期更新: 优秀的程序员,从使用Github开始:https://help.github.com/en/github/managing-your-work-on-g ...

  6. D3力布图绘制--基本方法

    本文主要结合案例记录使用D3.js绘制力布图的基本方法 样例显示 基本配置 this.force = d3.layout .force() .size([this.width, this.height ...

  7. 压缩20M文件从30秒到1秒的优化过程

    文章来源公众号:IT牧场 有一个需求需要将前端传过来的10张照片,然后后端进行处理以后压缩成一个压缩包通过网络流传输出去.之前没有接触过用Java压缩文件的,所以就直接上网找了一个例子改了一下用了,改 ...

  8. 【洛谷5437】【XR-2】约定(拉格朗日插值)

    [洛谷5437][XR-2]约定(拉格朗日插值) 题面 洛谷 题解 首先发现每条边除了边权之外都是等价的,所以可以考虑每一条边的出现次数. 显然钦定一条边之后构成生成树的方案数是\(2*n^{n-3} ...

  9. IDEA创建xml文件

    今天在用IDEA写项目的时候发现,创建xml文件只能通过File手动输入去创建,但在我看的一个学习视频上可以直接创建xml文件,好奇之下研究了一下,作此篇,希望能对需要的朋友有所帮助. 废话就不多说了 ...

  10. Delphi - DateTimePicker控件日期格式

    设置成显示年.月.日.时.分.秒 1:将DateTimePicker的Format属性中加入日期格式设成 'yyyy-MM-dd HH:mm:ss',注意日期里月份对应的MM是大写,时间里的分钟对应的 ...