1. 程式人生 > >洛谷 P3663 [USACO17FEB]Why Did the Cow Cross the Road III S

洛谷 P3663 [USACO17FEB]Why Did the Cow Cross the Road III S

lan algorithm define 其中 bfs times text dot ott

P3663 [USACO17FEB]Why Did the Cow Cross the Road III S

題目描述

Why did the cow cross the road? Well, one reason is that Farmer John‘s farm simply has a lot of roads, making it impossible for his cows to travel around without crossing many of them.

為什麽牛過馬路? 其中一個簡單的原因就是農民約翰的農場有很多道路,使得他的母牛不得不穿越許多道路。

FJ‘s farm is arranged as an N \times NN×N square grid of fields (2 \leq N \leq 1002N100), Certain pairs of adjacent fields (e.g., north-south or east-west) are separated by roads, and a tall fence runs around the external perimeter of the entire grid, preventing cows from leaving the farm. Cows can move freely from any field to any other adjacent field (north, east, south, or west), although they prefer not to cross roads unless absolutely necessary.

FJ的農場在 N\times NN×N的網格中( 2\le N\le 1002N100),某些相鄰的區域(例如,南北或東西)由道路分隔,高大的圍欄圍繞著整個格柵的外圍,防止牛離開農場。 牛可以從任何場地自由移動到任何其他相鄰的區域(北,東,南或西),不過除非不得已,她們並不願意穿越道路。

There are KK cows (1 \leq K \leq 100, K \leq N^21K100,KN?2??) on FJ‘s farm, each located in a different field. A pair of cows is said to be "distant" if, in order for one cow to visit the other, it is necessary to cross at least one road. Please help FJ count the number of distant pairs of cows.

在FJ的農場有 KK 頭牛(1\le K\le 100,K\le N^{2}1K100,KN?2??),每個位於不同的區域。 定義一對牛是“遙遠的”,是指讓一頭牛訪問另一頭牛時,必須至少穿過一條路。 請幫助FJ計算有多少對牛是“遙遠的”。

輸入輸出格式

輸入格式:

The first line of input contains NN, KK, and RR. The next RR lines describe RR roads that exist between pairs of adjacent fields. Each line is of the form rr cc r‘r??? c‘c??? (integers in the range 1 \ldots N1N), indicating a road between the field in (row rr, column cc) and the adjacent field in (row r‘r???, column c‘c???). The final KK lines indicate the locations of the KK cows, each specified in terms of a row and column.

第一行輸入包含 NN, KK和 RR。 接下來的 RR 行描述存在於相鄰區域對之間的 RR 條路。 每行的格式為 rr ; cc ; r‘r??? ; c‘c???(都是在 1...N1...N中的整數),表示在兩個相鄰的區域(第rr行第cc列,和第$r?‘$ ?? 行第$c?‘$ ?? 列)之間的路。 最終的KK行表示 KK 頭牛的位置,也用行列來表示。

輸出格式:

Print the number of pairs of cows that are distant.

輸出遙遠的牛數量對。

輸入輸出樣例

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

說明

感謝@太陽之神2015 提供翻譯

思路:暴力模擬一下就好。

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 105
using namespace std;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int ans,tim,n,k,r;
int x[MAXN],y[MAXN];
int vis[MAXN][MAXN],b[MAXN][MAXN][4];
struct nond{
    int x,y;
};
queue<nond>que;
void bfs(int s){
    nond v;
    v.x=x[s];v.y=y[s];
    que.push(v);
    vis[x[s]][y[s]]=++tim;
    while(!que.empty()){
        nond now=que.front();
        que.pop();
        for(int i=0;i<4;i++)
            if(b[now.x][now.y][i]==0){
                int tx=now.x+dx[i];
                int ty=now.y+dy[i];
                if(tx>=1&&ty>=1&&tx<=n&&ty<=n&&!vis[tx][ty]){
                    vis[tx][ty]=tim;
                    nond vv;
                    vv.x=tx;
                    vv.y=ty;
                    que.push(vv);
                }
            }
    }    
}
int main(){
    scanf("%d%d%d",&n,&k,&r);
    memset(b,0,sizeof(b));
    for(int i=1;i<=r;i++){
        int x,y,tx,ty;
        scanf("%d%d%d%d",&x,&y,&tx,&ty);
        if(x==tx){
            if(y<ty){
                b[x][y][0]=1;
                b[tx][ty][2]=1;
            }
            else{
                b[x][y][2]=1;
                b[tx][ty][0]=1;    
            }
        }
        else{
            if(x<tx){
                b[x][y][1]=1;
                b[tx][ty][3]=1;
            }
            else{
                b[x][y][3]=1;
                b[tx][ty][1]=1;
            }
        }
    }
    for(int i=1;i<=k;i++)
        scanf("%d%d",&x[i],&y[i]);
    for(int i=1;i<=k;i++)
        if(!vis[x[i]][y[i]])
            bfs(i);
    for(int i=1;i<=k;i++)
        for(int j=i+1;j<=k;j++)
            if(vis[x[i]][y[i]]!=vis[x[j]][y[j]])
                ans++;
    printf("%d",ans);
}

洛谷 P3663 [USACO17FEB]Why Did the Cow Cross the Road III S