1. 程式人生 > >[USACO09JAN]地震造成的破壞Earthquake Damage

[USACO09JAN]地震造成的破壞Earthquake Damage

題目 dfs搜索 nim diff sin scan truck 註意 搜索

題目描述

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 <= 30,000) pastures conveniently numbered 1..P which are connected by a set of C (1 <= C <= 100,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 contact 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 (including ones that are uncrossable) from which it is not possible to return to the barn.

Note: Feedback on some of the test data will be provided on the first 50 submissions

農夫John的農場遭受了一場地震.有一些牛棚遭到了損壞,但幸運地,所有牛棚間的路經都還能使用. FJ的農場有P(1 <= P <= 30,000)個牛棚,編號1..P. C(1 <= C <= 100,000)條雙向路經聯接這些牛棚,編號為1..C. 路經i連接牛棚a_i和b_i (1 <= a_i<= P;1 <= b_i <= P).路經可能連接a_i到它自己,兩個牛棚之間可能有多條路經.農莊在編號為1的牛棚. N (1 <= N <= P)頭在不同牛棚的牛通過手機短信report_j(2 <= report_j <= P)告訴FJ它們的牛棚(report_j)沒有損壞,但是它們無法通過路經和沒有損壞的牛棚回到到農場. 當FJ接到所有短信之後,找出最小的不可能回到農莊的牛棚數目.這個數目包括損壞的牛棚. 註意:前50次提交將提供在一些測試數據上的運行結果.

輸入輸出格式

輸入格式:

  • 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: A single integer that is the minimum count of pastures from which a cow can not return to the barn (including the damaged pastures themselves)

輸入輸出樣例

輸入樣例#1:
4 3 1 
1 2 
2 3 
3 4 
3 
輸出樣例#1:
3 

說明

Pasture 2 is damaged, resulting in cows in pastures 2, 3, 4 not being able to return to the barn.

類似於noip2014的尋找道路

不可行點鄰接著的點也一定不可行

dfs搜索一遍可行點的數量,最終答案=P-可行點的數量

#include<iostream>
#include<cstdio>
#include<vector>
#define MAXN 30005
using namespace std;
vector<int>g[MAXN];
bool vis[MAXN];
int ans;
void dfs(int x)
{
    vis[x]=1;
    ans++;
    for(int i=0;i<g[x].size();i++)
        if(!vis[g[x][i]])
            dfs(g[x][i]);
}
int main()
{
    int n,m,k;
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1,u,v;i<=m;i++)
    {
        scanf("%d%d",&u,&v);
        g[u].push_back(v);
        g[v].push_back(u);
    }
    for(int i=1,x;i<=k;i++)
    {
        scanf("%d",&x);
        for(int j=0;j<g[x].size();j++)
            vis[g[x][j]]=1;    
    }
    dfs(1);
    printf("%d",n-ans);
}

[USACO09JAN]地震造成的破壞Earthquake Damage