题意:

题目描述:在公元3141年人类的足迹已经遍布银河系。为了穿越那巨大的距离,人类发明了一种名为超时空轨道的技术。超时空轨道是双向的,连接两个星系,穿越轨道需要一天的时间。然而这个轨道只能同时给一艘飞船使用,也就是说,每条轨道每天只能有一艘飞船穿越。现在IBM公司要把K(K≤50)台超级计算机从地球运到Eisiem星系去,由于这些超级计算机个头巨大,一台计算机就要用一艘飞船来运。现在人类能够到达N(N≤50)个星系,拥有M(M≤200)条超时空轨道,太阳系的编号为S,Eisiem星系的编号为T。你需要求出至少需要几天才能将这些超级计算机全部运到目的地。注意,IBM公司是非常NB的公司,所有的超时空轨道都会优先给IBM公司使用。

思路:





From lydrainbowcat

//By SiriusRen
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 5555
#define M 444444
int n,m,k,from[N],to[N],jy,rec[N][55],rect[N][55],inf=0x3f3f3f3f;
int first[N],next[M],v[M],w[M],tot,T=5551,day,vis[N],ans;
void Add(int x,int y,int z){w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;}
void add(int x,int y,int z){Add(x,y,z),Add(y,x,0);}
bool tell(){
memset(vis,-1,sizeof(vis)),vis[0]=0;
queue<int>q;q.push(0);
while(!q.empty()){
int t=q.front();q.pop();
for(int i=first[t];~i;i=next[i])
if(w[i]&&vis[v[i]]==-1)
vis[v[i]]=vis[t]+1,q.push(v[i]);
}return vis[T]!=-1;
}
int zeng(int x,int y){
if(x==T)return y;
int r=0;
for(int i=first[x];~i&&y>r;i=next[i])
if(w[i]&&vis[v[i]]==vis[x]+1){
int t=zeng(v[i],min(y-r,w[i]));
w[i]-=t,w[i^1]+=t,r+=t;
}
if(!r)vis[x]=-1;
return r;
}
void dfs(int x,int Day){
for(int i=first[x];~i;i=next[i])
if(w[i^1]){
w[i]++,w[i^1]--;
if(v[i]==T)return;
if(v[i]==x+n)dfs(v[i],Day+1);
else{
rec[Day][0]++;
rec[Day][rec[Day][0]]=jy;
rect[Day][rec[Day][0]]=(v[i]-1)%n+1;
dfs(v[i],Day+1);
}
break;
}
}
int main(){
memset(first,-1,sizeof(first));
scanf("%d%d%d%d%d",&n,&m,&k,&from[0],&to[0]);
for(int i=1;i<=m;i++){
scanf("%d%d",&from[i],&to[i]);
}add(0,from[0],k);
day=0;
while(++day){
for(int i=1;i<=m;i++)add(from[i]+(day-1)*n,to[i]+day*n,1),add(to[i]+(day-1)*n,from[i]+day*n,1);
for(int i=1;i<=n;i++)add(i+(day-1)*n,i+day*n,inf);
add(to[0]+day*n,T,inf);
while(tell())while(jy=zeng(0,inf))ans+=jy;
if(ans==k){printf("%d\n",day);break;}
}
for(jy=k;jy;jy--)dfs(0,0);
for(int i=1;i<=day;i++){
printf("%d ",rec[i][0]);
for(int j=1;j<=rec[i][0];j++)
printf("%d %d ",rec[i][j],rect[i][j]);
putchar('\n');
}
}

POJ 1895 分层图网络流+输出路径的更多相关文章

  1. ACdream 1017 [分层图][网络流]

    /* 大连热身C题 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一个城市路线图,给定起点给定终点.有n个货物从起点运送到终点.城市的边是无向边. 每个货物每天如果通过某条路,那么这天这条路只能运 ...

  2. (poj)3414 Pots (输出路径的广搜)

    Description You are given two pots, having the volume of A and B liters respectively. The following ...

  3. [CTSC1999]家园 分层图网络流_并查集

    Code: #include<cstdio> #include<vector> #include<algorithm> #include<queue> ...

  4. 【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa

    3627: [JLOI2014]路径规划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 186  Solved: 70[Submit][Status] ...

  5. POJ 3635 Full Tank? 【分层图/最短路dp】

    任意门:http://poj.org/problem?id=3635 Full Tank? Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  6. POJ 1724 (分层图最短路)

    ### POJ 1724 题目链接 ### 题目大意: 给你 N 个点 ,M 条有向路,走每条路需要花费 C 元,这段路的长度为 L . 给你 K 元,问你能否从 1 走到 N 点且花费不超过 K 元 ...

  7. 【网络流24题】 No.15 汽车加油行驶问题 (分层图最短路i)

    [题意] 问题描述:给定一个 N*N 的方形网格,设其左上角为起点◎, 坐标为( 1, 1), X 轴向右为正, Y轴向下为正, 每个方格边长为 1, 如图所示. 一辆汽车从起点◎出发驶向右下角终点▲ ...

  8. 【网络流24题】 No.14 孤岛营救问题 (分层图最短路)

    [题意] 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛, 营救被敌军俘虏的大兵瑞恩. 瑞恩被关押在一个迷宫里, 迷宫地形复杂, 但幸好麦克得到了迷宫的地形图. 迷宫的外形是 ...

  9. POJ 3684 Priest John&#39;s Busiest Day 2-SAT+输出路径

    强连通算法推断是否满足2-sat,然后反向建图,拓扑排序+染色. 一种选择是从 起点開始,还有一种是终点-持续时间那个点 開始. 若2个婚礼的某2种时间线段相交,则有矛盾,建边. easy出错的地方就 ...

随机推荐

  1. jQuery第三课 点击按钮 弹出层div效果

    jQuery 事件方法 事件方法会触发匹配元素的事件,或将函数绑定到所有匹配元素的某个事件. 触发实例: $("button#demo").click() 上面的例子将触发 id= ...

  2. 【Henu ACM Round#24 B】Gargari and Bishops

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果写过n皇后问题. 肯定都知道 某个点(i,j)和它在同一条对角线上的点分别是i+j的值和i-j的值相同的点. 然后会发现选择的两 ...

  3. BNUOJ 34990 Justice String

    Justice String Time Limit: 2000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java cla ...

  4. less06 引入(importing)

    main.less @wp:960px; .colorsss{ color: darkgreen; } index.css .color{ color: #ff6600; } style.less / ...

  5. thinkphp5项目--个人博客(四)

    thinkphp5项目--个人博客(四) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...

  6. 8.最佳的MongoDB客户端管理工具

    转自:https://blog.csdn.net/chszs/article/details/51348248

  7. <Three.js>(第一节)环境搭建

    Three.js顾名思义3D的js库.是运行在浏览器的基于webgl的3D引擎.该引擎是github上的一个开源项目,下载地址:https://github.com/mrdoob/three.js/ ...

  8. Windows10显示桌面我的电脑等图标

    1.桌面右键,选择最后一项:个性化 2. 选择:主题 --> 桌面图标设置 3. 将需要显示的图标勾上就可以啦.

  9. WLAN RTT (IEEE 802.11mc)

    WLAN RTT (IEEE 802.11mc) Android 9 中的 WLAN 往返时间 (RTT) 功能允许设备测量与其他支持设备的距离:无论它们是接入点 (AP) 还是 WLAN 感知对等设 ...

  10. WIFI 概览

      概览 Android 提供默认 Android 框架实现,其中包括对各种 WLAN 协议和模式的支持,这些协议和模式包括: WLAN 基础架构 (STA) 网络共享模式或仅限本地模式下的 WLAN ...