题意

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

\(x<2^{31},n \leq 200,m \leq 2000\)

分析

都不用建模了,直接跑网络流就行了。

时间复杂度\(O(n^2 m)\)

代码

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<algorithm>
#include<string>
#define co const
template<class T>T read(T&x)
{
    T data=0;
    int w=1;
    char ch=getchar();
    while(!isdigit(ch))
    {
        if(ch=='-')
            w=-1;
        ch=getchar();
    }
    while(isdigit(ch))
    {
        data=data*10+ch-'0';
        ch=getchar();
    }
    return x=data*w;
}
using namespace std;
co int INF=0x3f3f3f3f;

co int MAXN=250,MAXM=2050;
int n,m;

struct edge
{
    int nx,to,c;
}e[MAXM<<1];
int head[MAXN],ecnt;

void addedge(int x,int y,int c)
{
    e[++ecnt].to=y,e[ecnt].c=c;
    e[ecnt].nx=head[x],head[x]=ecnt;
}

queue<int>Q;
int dep[MAXN],cur[MAXN];

bool bfs(int s,int t)
{
    copy(head+1,head+n+1,cur+1);
    fill(dep+1,dep+n+1,INF);
    dep[s]=0;
    Q.push(s);
    while(Q.size())
    {
        int x=Q.front();
        Q.pop();
        for(int i=head[x];i!=-1;i=e[i].nx)
        {
            int y=e[i].to,c=e[i].c;
            if(c>0&&dep[y]>dep[x]+1)
            {
                dep[y]=dep[x]+1;
                Q.push(y);
            }
        }
    }
    return dep[t]<INF;
}

int dfs(int x,int t,int lim)
{
    if(x==t||!lim)
        return lim;
    int delta=0,inc;
    for(int i=cur[x];i!=-1;i=e[i].nx)
    {
        cur[x]=i;
        int y=e[i].to,c=e[i].c;
        if(dep[y]==dep[x]+1&&(inc=dfs(y,t,min(lim,c))))
        {
            delta+=inc;
            lim-=inc;
            e[i].c-=inc;
            e[i^1].c+=inc;
            if(!lim) // edit 1
                break;
        }
    }
    return delta; // edit 2
}

int Dinic(int s,int t)
{
    int res=0;
    while(bfs(s,t))
        res+=dfs(s,t,INF);
    return res;
}

int main()
{
//  freopen(".in","r",stdin);
//  freopen(".out","w",stdout);
    int tot;
    read(n);read(m);read(tot);
    fill(head+1,head+n+1,-1);
    ecnt=-1;
    for(int i=1;i<=m;++i)
    {
        int x,y,c;
        read(x);read(y);read(c);
        addedge(x,y,c);
        addedge(y,x,0);
    }
    int ans=Dinic(1,n);
    if(ans==0)
    {
        puts("Orz Ni Jinan Saint Cow!");
    }
    else
    {
        printf("%d %d\n",ans,tot/ans+bool(tot%ans));
    }
    return 0;
}

LG1343 地震逃生的更多相关文章

  1. 洛谷 P10P1343 地震逃生 改错

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

  2. 洛谷 P1343 地震逃生

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

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

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

  4. P1343 地震逃生(最大流板题)

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

  5. P1343 地震逃生

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

  6. 【u033】地震逃生

    Time Limit: 1 second Memory Limit: 64 MB [问题描述] 汶川地震发生时,四川**中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一 ...

  7. 【luogu P1343 地震逃生】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1343 菜 #include <queue> #include <cstdio> #i ...

  8. 【洛谷P1343】地震逃生

    一道傻吊的网络流题,wori我写的读入优化怎么老T? 远离读入优化报平安? #include<bits/stdc++.h> #define N 4005 #define inf 10000 ...

  9. [Luogu1343]地震逃生 最大流

    题目链接:https://www.luogu.org/problem/show?pid=1343 dinic跑最大流. #include<cstdio> #include<cstri ...

随机推荐

  1. 【Bitset】重识

    ---------------------------------------------------------------------------- 一题题目: 一题题解: 这个题目哪来入门再好不 ...

  2. centos 6 安装python2.7和pip

    由于scrapy1.0的发布,想在Linux上测试,所以安装了centos6.6:但是它的python版本为2.6,很多东西都不支持,所以需要升级为2.7: 首先是在window7上安装虚拟机,然后安 ...

  3. double int char long 等数据类型所占的字节数-----待整理

  4. git代码版本回退

    git log 用于查看我们修改提交的快照记录(commit记录),然后会有个commit修改记录的id编号,该命令显示从最近到最远的提交日志,我们可以看到3次提交记录,如下: git checkou ...

  5. LeetCode 380. Insert Delete GetRandom O(1)

    380. Insert Delete GetRandom O(1) Add to List Description Submission Solutions Total Accepted: 21771 ...

  6. 使用maven插件自动部署web应用至Docker容器的tomcat

    配置maven 在pom.xml加入 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 <plugins>     <plugin>         <gr ...

  7. Docker 生态

    Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker 自从发布以来发生了很多的变化,并且有些 ...

  8. Less开发指南(二)- 基本语法

    (一)嵌套规则 [1]less可以让我们以嵌套的方式编写层叠样式,先看下面这段CSS: .box-a .hd { height: 20px; } .box-a .bd .txt { color: #0 ...

  9. Im4java+ImageMagick/GraphicsMagick

    im4java的jar包可以在maven库中找到. <dependency> <groupId>org.im4java</groupId> <artifact ...

  10. SQLServer中通过脚本内容查找存储过程

    select o.name,m.definition from sys.objects o left outer join sys.sql_modules m on o.object_id = m.o ...