洛谷2944 [USACO09MAR]地震损失2Earthquake Damage 2

https://www.luogu.org/problem/show?pid=2944

题目描述

Wisconsin has had an earthquake that has struck Farmer John‘s farm! The earthquake has damaged some of the pastures so that they are unpassable. Remarkably, none of the cowpaths was damaged.

As usual, the farm is modeled as a set of P (1 <= P <= 3,000)

pastures conveniently numbered 1..P which are connected by a set of C (1 <= C <= 20,000) non-directional cowpaths conveniently

numbered 1..C. Cowpath i connects pastures a_i and b_i (1 <= a_i <= P; 1 <= b_i <= P). Cowpaths might connect a_i to itself or perhaps might connect two pastures more than once. The barn is located in pasture 1.

A total of N (1 <= N <= P) cows (in different pastures) sequentially contacts Farmer John via moobile phone with an integer message report_j (2 <= report_j <= P) that indicates that pasture report_j is undamaged but that the calling cow is unable to return to the barn from pasture report_j because she could not find a path that does not go through damaged pastures.

After all the cows report in, determine the minimum number of

pastures that are damaged.

地震袭击了威斯康星州,一些牧场被摧毁了.

一共有P个牧场.由C条双向路连接.两个牧场间可能有多条路.一条路也可能连接相同的牧场.牛棚坐落在牧场1.

N (1 <= N <= P) 只奶牛打来了求救电话,说她们的农场没有被摧毁,但是已经无法到达牛棚. 求出最少可能有多少牧场被摧毁.

输入输出格式

输入格式:

  • Line 1: Three space-separated integers: P, C, and N
  • Lines 2..C+1: Line i+1 describes cowpath i with two integers: a_i and b_i
  • Lines C+2..C+N+1: Line C+1+j contains a single integer: report_j

输出格式:

  • Line 1: One number, the minimum number of damaged pastures.

输入输出样例

输入样例#1:

5 5 2
1 2
2 3
3 5
2 4
4 5
4
5

输出样例#1:

1

说明

Only pasture 2 being damaged gives such a scenario.

拆点!!!

#include<queue>
#include<cstdio>
#define N 3101
#define M 21001

using namespace std;

const int inf=2e9;

int n,c,p;
int src,decc,ans;
int front[N*2],to[M*5],nxt[M*5],cap[M*5],tot=1;
int cnt[N*2],lev[N*2];

queue<int>q;

void add(int u,int v,int w)
{
    to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; cap[tot]=w;
    to[++tot]=u; nxt[tot]=front[v]; front[v]=tot; cap[tot]=0;
}
bool bfs()
{
    for(int i=0;i<=p*2+1;i++)
     lev[i]=-1,cnt[i]=front[i];
    while(!q.empty()) q.pop();
    q.push(src); lev[src]=0;
    int now;
    while(!q.empty())
    {
        now=q.front(); q.pop();
        for(int i=cnt[now];i;i=nxt[i])
            if(lev[to[i]]==-1 && cap[i])
            {
                lev[to[i]]=lev[now]+1;
                q.push(to[i]);
                if(to[i]==decc) return true;
            }
    }
    return false;
}
int dinic(int now,int flow)
{
    if(now==decc) return flow;
    int delta,rest=0;
    for(int &i=cnt[now];i;i=nxt[i])
    {
        if(cap[i] && lev[to[i]]>lev[now])
        {
            delta=dinic(to[i],min(flow-rest,cap[i]));
            if(delta)
            {
                rest+=delta;
                cap[i]-=delta; cap[i^1]+=delta;
                if(rest==flow) break;
            }
        }
    }
    if(rest!=flow) lev[now]=-1;
    return rest;
}
int main()
{
    scanf("%d%d%d",&p,&c,&n);
    decc=1;
    int u,v;
    for(int i=2;i<=p;i++) add(i<<1|1,i<<1,1);
    for(int i=1;i<=c;i++)
    {
        scanf("%d%d",&u,&v);
        if(u==v) continue;
        if(u==1) add(v<<1,1,inf);
        else if(v==1) add(u<<1,1,inf);
        else
        {
            add(u<<1,v<<1|1,inf);
            add(v<<1,u<<1|1,inf);
        }
    }
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&u);
        add(src,u<<1,inf);
    }
    while(bfs())
     ans+=dinic(src,inf);
    printf("%d",ans);
}
时间: 2024-11-20 00:58:54

洛谷2944 [USACO09MAR]地震损失2Earthquake Damage 2的相关文章

P2944 [USACO09MAR]地震损失2Earthquake Damage 2(网络流)

P2944 [USACO09MAR]地震损失2Earthquake Damage 2 $P$个点,$C$条双向边.求最少删去几个点使$N$个给定的点与点$1$分开. 显然的最小割. 将点$i$套路地拆成$i_1,i_2$,割点转化成割边 对于点$1$:$link(S,1_1,inf),link(1_1,1_2,inf)$.保证不被割掉,且分到$S$割中 对于每个给定点$k$:$link(k_2,T,inf),link(k_1,k_2,inf)$.保证不被割掉,且分到$T$割中 对于每条双向边$(

[USACO09MAR]地震损失2Earthquake Damage 2

地震破坏 时间限制: 1 Sec  内存限制: 128 MB 题目描述 威斯康星发生了一场地震!约翰的牧场遭到了打击,有一些牛棚变成了废墟,如果一间牛棚遭到 了破坏,那么所有和它相连的道路都不能使用了. 约翰有 N 个牛棚,编号为 1 到 N,有 M 条双向道路连接这些牛棚,第 i 条道路连接的牛棚是 A i 和 B i ,A i 可能等于 B i ,也可能有多条道路连接同一对牛棚. 约翰让奶牛们集中到 1 号牛棚避难.有 P 头奶牛通过手机向约翰求救,她们的遭遇类似:好消 息是她们所在的牛棚没

洛谷P2947 [USACO09MAR]仰望Look Up

P2947 [USACO09MAR]仰望Look Up 74通过 122提交 题目提供者洛谷OnlineJudge 标签USACO2009云端 难度普及/提高- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 中文翻译应当为向右看齐 题目中文版范围.. 题目描述 Farmer John's N (1 <= N <= 100,000) cows, conveniently numbered 1..N, are once again standing in a row. Co

洛谷 P2945 [USACO09MAR]沙堡Sand Castle

P2945 [USACO09MAR]沙堡Sand Castle 题目描述 Farmer John has built a sand castle! Like all good castles, the walls have crennelations, that nifty pattern of embrasures (gaps) and merlons (filled spaces); see the diagram below. The N (1 <= N <= 25,000) merlo

【洛谷P1343】地震逃生

一道傻吊的网络流题,wori我写的读入优化怎么老T? 远离读入优化报平安? #include<bits/stdc++.h> #define N 4005 #define inf 1000000007 using namespace std; int head[4*N],tot=0,n,m,x,s,t,ans; struct Edge{int u,v,next,f;}G[2000010]; inline void addedge(int u,int v,int f){ G[tot].u=u;G[

洛谷教主花园dp

洛谷-教主的花园-动态规划 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢3种树,这3种树的高度分别为10,20,30.教主希望这一圈树种得有层次感,所以任何一个位置的树要比它相邻的两棵树的高度都高或者都低,并且在此条件下,教主想要你设计出一套方案,使得观赏价值之和最高. 输入输出格式 输入格式: 输入文件garden.in的第1行为一个正整数n,表示需要种的

洛谷 P3227 BZOJ 3144 [HNOI2013]切糕

题目描述 经过千辛万苦小 A 得到了一块切糕,切糕的形状是长方体,小 A 打算拦腰将切糕切成两半分给小 B.出于美观考虑,小 A 希望切面能尽量光滑且和谐.于是她找到你,希望你能帮她找出最好的切割方案. 出于简便考虑,我们将切糕视作一个长 P.宽 Q.高 R 的长方体点阵.我们将位于第 z层中第 x 行.第 y 列上(1≤x≤P, 1≤y≤Q, 1≤z≤R)的点称为(x,y,z),它有一个非负的不和谐值 v(x,y,z).一个合法的切面满足以下两个条件: 与每个纵轴(一共有 P*Q 个纵轴)有且

洛谷1133 教主的花园

洛谷1133 教主的花园 本题地址:http://www.luogu.org/problem/show?pid=1133 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢3种树,这3种树的高度分别为10,20,30.教主希望这一圈树种得有层次感,所以任何一个位置的树要比它相邻的两棵树的高度都高或者都低,并且在此条件下,教主想要你设计出一套方案,使得观赏价值之和最

洛谷P1462 通往奥格瑞玛的道路

P1462 通往奥格瑞玛的道路 219通过 1.2K提交 题目提供者gconeice 标签二分图论洛谷原创 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 RE好多.. 到底怎么判断AFK啊 看不懂题目.. 建议修改题目 究竟是血量为负算挂还是生命… 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯,有n个城市.编号为1,2,3,...,