ACdream 1017 [分层图][网络流]
- /*
- 大连热身C题
- 不要低头,不要放弃,不要气馁,不要慌张
- 题意:
- 给一个城市路线图,给定起点给定终点。有n个货物从起点运送到终点。城市的边是无向边。
- 每个货物每天如果通过某条路,那么这天这条路只能运送这一个货物,另外一个方向也不得运送货物。
- 问最少需要多少天,使得起点的货物全部运送到终点。
- 思路:
- 按照天数将城市节点裂点。即第i天的某个节点。
- 枚举天数,不断重新构建网络,跑最大流。找到最小的天数使得最大流大于等于n。
- 看了大神的博客,知道这个东西实际上叫做分层图。
- */
- #include<bits/stdc++.h>
- using namespace std;
- const int MAXN=,MAXM=,inf=1e9;
- struct Edge
- {
- int v,c,f,nx;
- Edge() {}
- Edge(int v,int c,int f,int nx):v(v),c(c),f(f),nx(nx) {}
- } E[MAXM];
- int G[MAXN],cur[MAXN],pre[MAXN],dis[MAXN],gap[MAXN],sz;
- void init()
- {
- sz=; memset(G,-,sizeof(G));
- }
- void add_edge(int u,int v,int c)
- {
- //printf("%d %d \n",u,v);
- E[sz]=Edge(v,c,,G[u]); G[u]=sz++;
- E[sz]=Edge(u,,,G[v]); G[v]=sz++;
- }
- bool bfs(int S,int T)
- {
- static int Q[MAXN]; memset(dis,-,sizeof(dis));
- dis[S]=; Q[]=S;
- for (int h=,t=,u,v,it;h<t;++h)
- {
- for (u=Q[h],it=G[u];~it;it=E[it].nx)
- {
- if (dis[v=E[it].v]==-&&E[it].c>E[it].f)
- {
- dis[v]=dis[u]+; Q[t++]=v;
- }
- }
- }
- return dis[T]!=-;
- }
- int dfs(int u,int T,int low)
- {
- if (u==T) return low;
- int ret=,tmp,v;
- for (int &it=cur[u];~it&&ret<low;it=E[it].nx)
- {
- if (dis[v=E[it].v]==dis[u]+&&E[it].c>E[it].f)
- {
- if (tmp=dfs(v,T,min(low-ret,E[it].c-E[it].f)))
- {
- ret+=tmp; E[it].f+=tmp; E[it^].f-=tmp;
- }
- }
- }
- if (!ret) dis[u]=-; return ret;
- }
- int dinic(int S,int T)
- {
- int maxflow=,tmp;
- while (bfs(S,T))
- {
- memcpy(cur,G,sizeof(G));
- while (tmp=dfs(S,T,inf)) maxflow+=tmp;
- }
- return maxflow;
- }
- struct edge{
- int id;
- edge *next;
- };
- edge edges[];
- edge *adj[];
- int ednum;
- inline void addedge(int a,int b){
- edge *tmp=&edges[ednum++];
- tmp->id=b;
- tmp->next=adj[a];
- adj[a]=tmp;
- }
- int x[],y[];
- int ddis[];
- struct st{
- st(){}
- st(int a,int b){
- id=a;step=b;
- }
- int id,step;
- };
- int main()
- {
- int n,m,k,s,t;
- while(scanf("%d%d%d%d%d",&n,&m,&k,&s,&t)!=EOF){
- if(m>=)while()puts("+++");
- ednum=;
- memset(adj,NULL,sizeof(adj));
- for(int i=;i<=m;i++){
- scanf("%d%d",x+i,y+i);
- addedge(x[i],y[i]);
- addedge(y[i],x[i]);
- }
- memset(ddis,-,sizeof(ddis));
- for(int i=;;i++){
- init();
- for(int j=;j<=m;j++){
- for(int tt=;tt<i;tt++){
- add_edge(tt*n+x[j],tt*n+n+y[j],);
- add_edge(tt*n+y[j],tt*n+n+x[j],);
- }
- }
- add_edge(,,k);
- for(int j=;j<=i;j++){
- add_edge(j*n+t,,inf);
- add_edge(,j*n+s,inf);
- }
- int w=dinic(,);
- if(w>=k){
- printf("%d\n",i);
- break;
- }
- }
- }
- }
ACdream 1017 [分层图][网络流]的更多相关文章
- [CTSC1999]家园 分层图网络流_并查集
Code: #include<cstdio> #include<vector> #include<algorithm> #include<queue> ...
- POJ 1895 分层图网络流+输出路径
题意: 题目描述:在公元3141年人类的足迹已经遍布银河系.为了穿越那巨大的距离,人类发明了一种名为超时空轨道的技术.超时空轨道是双向的,连接两个星系,穿越轨道需要一天的时间.然而这个轨道只能同时给一 ...
- 【网络流24题】 No.15 汽车加油行驶问题 (分层图最短路i)
[题意] 问题描述:给定一个 N*N 的方形网格,设其左上角为起点◎, 坐标为( 1, 1), X 轴向右为正, Y轴向下为正, 每个方格边长为 1, 如图所示. 一辆汽车从起点◎出发驶向右下角终点▲ ...
- 【网络流24题】 No.14 孤岛营救问题 (分层图最短路)
[题意] 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛, 营救被敌军俘虏的大兵瑞恩. 瑞恩被关押在一个迷宫里, 迷宫地形复杂, 但幸好麦克得到了迷宫的地形图. 迷宫的外形是 ...
- ACdream 1017 Fast Transportation
http://acdream.info/problem?pid=1017 题意:给n个点,m条边,K个货物,要从从S到T,每天每条边最多只能经过1次,求要几天能运完 思路:拆成分层图,每层向下一层连边 ...
- [CODEVS1911] 孤岛营救问题(分层图最短路)
传送门 吐槽:神tm网络流... 用持有的钥匙分层,状态压缩,用 2 进制表示持有的钥匙集合. dis[i][j][k] 表示持有的钥匙集合为 k,到达点 (i, j) 的最短路径. 分层图的最短路听 ...
- 【题解】P3645 [APIO2015]雅加达的摩天楼(分层图最短路)
[题解]P3645 [APIO2015]雅加达的摩天楼(分层图最短路) 感觉分层图是个很灵活的东西 直接连边的话,边数是\(O(n^2)\)的过不去 然而我们有一个优化的办法,可以建一个新图\(G=( ...
- 【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa
3627: [JLOI2014]路径规划 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 186 Solved: 70[Submit][Status] ...
- poj3635Full Tank?[分层图最短路]
Full Tank? Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7248 Accepted: 2338 Descri ...
随机推荐
- 去除手机浏览器input焦点默认边框(直接用outline:none就可以了)
1.使用Chrome的都知道,当鼠标焦点在input.textarea这些元素上时,Chrome默认的会给它们加上黄色的边框,我以前一直以为这是chrome的特性,没法去掉,原来是css的效果,out ...
- HTML编码规范
HTML编码规范 1 前言 HTML作为描述网页结构的超文本标记语言,在百度一直有着广泛的应用.本文档的目标是使HTML代码风格保持一致,容易被理解和被维护. 2 代码风格 2.1 缩进与换行 [强制 ...
- web前端的学习.
web前端的了解 1.前端技术包括JavaScript.ActionScript.CSS.xHTML等“传统”技术与Adobe AIR.Google Gears,以及概念性较强的交互式设计,艺术性较强 ...
- 【Cocos2d-x 3.x】 事件处理机制源码分析
在游戏中,触摸是最基本的,必不可少的.Cocos2d-x 3.x中定义了一系列事件,同时也定义了负责监听这些事件的监听器,另外,cocos定义了事件分发类,用来将事件派发出去以便可以实现相应的事件. ...
- 转:对于服务器AdminServer, 与计算机Machine-0相关联的节点管理器无法访问
控制台启动server时报"对于服务器server-1与计算机machin<!--StartFragment -->对于服务器AdminServer, 与计算机Machine-0 ...
- 初涉hash
今天和朋友讨论一个问题 有两百亿个数,我给出一个数,找到这两百亿个数中两数相加等于它的组合.要求时间复杂度为线性,空间2G 解决思路是开一个hash表比如a[1000]将所有数存入hash表中,a[i ...
- 激!GSS系列
#include <cstdio> ; ; inline int max(int, int); inline int getint(); inline void putint(int); ...
- javascript中bind函数的作用
javascript的bind的作用 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- 《Matrix Computation 3rd》读书笔记——第2章 矩阵分析
- 推荐的Android ORM框架
1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...