P1343 地震逃生

题目描述

汶川地震发生时,四川**中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有\(n\)个点,\(m\)条边。1号点为教室,\(n\)号点为安全地带,每条边都只能容纳一定量的学生,超过楼就要倒塌,由于人数太多,校长决定让同学们分成几批逃生,只有第一批学生全部逃生完毕后,第二批学生才能从1号点出发逃生,现在请你帮校长算算,每批最多能运出多少个学生,\(x\)名学生分几批才能运完。

输入输出格式

输入格式:

第一行3个整数\(n,m,x(x<2^{31},n<=200,m<=2000)\);以下\(m\)行,每行三个整数\(a,b,c\)描述一条边,分别代表从\(a\)点到\(b\)点有一条边,且可容纳\(c\)名学生。

输出格式:

两个整数,分别表示每批最多能运出多少个学生,\(x\)名学生分几批才能运完。如果无法到达目的地(\(n\)号点)则输出“\(Orz\) \(Ni\) \(Jinan\) \(Saint\) \(Cow!\)”


很明显网络流的裸题。

前几天看到对前向星用\(x\) \(nor\) 1\(找反边,觉得很方便,遂用一下,用想到很久没打\)dinic$了,就决定打打(以前都是偷懒打EK的)

不过这样找反边\(head\)最开始时得赋\(-1\),而且边的边界也是-1

因为

\(x\) \(nor\) \(1=x+1\),\(x\)为偶

\(x\) \(nor\) \(1=x-1\),\(x\)为奇

得用上0

然后我.....

我是得多智障才这样,居然样例还对了...

还有一点,最后算答案是\((ans-1)/\)最大流\(+1\)

我没给那个\(ans\)减一下


code:

#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
const int N=204;
const int M=2004;
const int inf=0x3f3f3f3f;
struct Edge
{
int w,to,next;
}edge[M*2];
struct node
{
int cnt,u;
}S[N];
int n,m,X,cnt=-1,head[N];
int top=0;
void push(int cnt0,int u0) {S[++top].cnt=cnt0,S[top].u=u0;}
void pop() {top--;}
int read()
{
int x=0;char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}
return x;
} void add(int u,int v,int w)
{
edge[++cnt].next=head[u],edge[cnt].to=v,edge[cnt].w=w,head[u]=cnt;
edge[++cnt].next=head[v],edge[cnt].to=u,edge[cnt].w=0,head[v]=cnt;
}
int dep[N],used[N],ans=0;
queue <int > q;
bool bfs()
{
memset(dep,0,sizeof(dep));
while(!q.empty()) q.pop();
q.push(1);dep[1]=1;
while(!q.empty()&&q.front()!=n)
{
int u=q.front();
q.pop();
for(int i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].to,w=edge[i].w;
if(!dep[v]&&w)
{
dep[v]=dep[u]+1;
q.push(v);
}
}
}
return !q.empty();
}
int main()
{
memset(head,-1,sizeof(head));
n=read(),m=read(),X=read();
int u,v,w;
for(int i=1;i<=m;i++)
{
u=read(),v=read(),w=read();
add(u,v,w);
}
while(bfs())
{
memset(used,0,sizeof(used));
top=0;
push(head[1],1);
while(top)
{
if(S[top].u==n)
{
int m_min=inf,id;
for(int i=2;i<=top;i++)
if(edge[S[i].cnt].w<m_min)
{
m_min=edge[S[i].cnt].w;
id=i;
}
ans+=m_min;
for(int i=2;i<=top;i++)
{
edge[S[i].cnt].w-=m_min;
edge[(S[i].cnt)^1].w+=m_min;
}
used[n]=0;
top=max(0,id-1);
}
else
{
int u=S[top].u;
for(int i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].to,w=edge[i].w;
if(!used[v]&&w&&dep[v]==dep[u]+1)
{
used[v]=1;
push(i,v);
break;
}
}
if(S[top].u==u) top--;
}
}
}
if(ans==0) {printf("Orz Ni Jinan Saint Cow!\n");return 0;}
printf("%d %d\n",ans,(X-1)/ans+1);
return 0;
}

2018.5.20

洛谷 P10P1343 地震逃生 改错的更多相关文章

  1. 洛谷 P1343 地震逃生

    P1343地震逃生 题目描述 汶川地震发生时,四川**中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有n个点,m条边.1号点为教室,n号点为安全地带,每 ...

  2. [洛谷P1343]地震逃生

    题目大意:有n个点m条单向边,每条边有一个容量.现有x人要分批从1走到n,问每批最多能走多少人,分几批运完(或输出无法运完). 解题思路:一看就是网络流的题目.每批最多能走多少人,即最大流.分几批运完 ...

  3. 洛谷4951 地震 bzoj1816扑克牌 洛谷3199最小圈 / 01分数规划

    洛谷4951 地震 #include<iostream> #include<cstdio> #include<algorithm> #define go(i,a,b ...

  4. 「洛谷P1343」地震逃生 解题报告

    P1343 地震逃生 题目描述 汶川地震发生时,四川XX中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有n个点,m条边.1号点为教室,n号点为安全地带, ...

  5. 洛谷 P1903 BZOJ 2120 清橙 A1274【模板】分块/带修改莫队(数颜色)(周奕超)

    试题来源 2011中国国家集训队命题答辩 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...

  6. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines

    P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...

  7. 洛谷P1119-灾后重建-floyd算法

    洛谷P1119-灾后重建 题目描述 给出\(B\)地区的村庄数NN,村庄编号从\(0\)到\(N-1\),和所有\(M\)条公路的长度,公路是双向的. 给出第\(i\)个村庄重建完成的时间\(t_i\ ...

  8. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  9. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

随机推荐

  1. 基于uFUN开发板的心率计(三)Qt上位机的实现

    前言 上两周利用周末的时间,分别写了基于uFUN开发板的心率计(一)DMA方式获取传感器数据和基于uFUN开发板的心率计(二)动态阈值算法获取心率值,介绍了AD采集传感器数据和数据的滤波处理获取心率值 ...

  2. 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--参数自动映射篇(6/8)

    文章目录 前情概要 路由.action的扫描.发现.注册搞定之后,后来我发现在我们的action里面获取参数往往都是通过request对象来一个一个获取.同样的一行代码我们不厌其烦的重复写了无数次.遂 ...

  3. sql 某字段存储另一个表的多个id值并以逗号分隔,现根据id去中文并拼接同样以逗号分隔

    首先介绍用到的两个函数 charindex(要查找的表达式1,表达式2),返回值为表达式1在表达式2中的下标,未找到则返回0.(sql的下标是从1开始的),例如 select charindex('s ...

  4. centos6下ActiveMQ+Zookeeper消息中间件集群部署记录

    由于最近一个项目并发请求压力比较大,所以考虑改进架构,引入消息中间件集群作为一个缓冲消息队列,具体需求:1)将大量的WebService请求报文发送到mq集群之中,并保持消息先后顺序2)保证每个消息的 ...

  5. Microsoft Visual Studio2013安装及单元测试

    和大家分享一下我安装VS2013和单元测试的过程.VS是微软多种编程软件的集合,功能与工作环境更全面,相比VC++6.0来说是一个很大的提升. VS安装: VS的安装和普通软件相同,只是花费的时间很长 ...

  6. 读书笔记(chapter3)

    进程管理 3.1进程 1.进程:进程就是处于执行期的程序,实际上,进程就是正在执行的程序代码的实时结果: 2.执行线程,简称线程,是进程中活动的对象(每个线程拥有独立的程序计数器.进程栈.和一组进程寄 ...

  7. UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现(转)

    UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现   类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统 ...

  8. CMake系列之四:多个源文件-多个目录

    多个源文件,多个目录 现在进一步将MathFunctions.c和MathFunctions.h文件移到math目录下: ./Demo3 | +--- main.c | +--- math/ | +- ...

  9. HDU 1236 排名(Microsoft_zzt)

    http://acm.hdu.edu.cn/showproblem.php?pid=1236 Problem Description 今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完 ...

  10. Install Jetty web server on CentOS 7 / RHEL 7

    http://www.eclipse.org/jetty/download.html http://www.eclipse.org/jetty/documentation/current/startu ...