PAT A1013 Battle Over Cities

提交时间状态分数题目编译器耗时用户
2018/11/27 21:06:13

部分正确

211013C++ (g++)9 msDirichlet
测试点结果耗时内存
0答案正确3 ms368KB
1答案正确3 ms384KB
2答案正确8 ms4480KB
3答案正确9 ms4360KB
4运行超时0 ms0KB

题目大意:

在战争中是否所有城市均被高速公路相连接至关重要。当敌人攻占一座城市,所有通往该城市的路均被关闭。因此我们需要知道我们需要新建哪些路使得剩余所有城市相连接。给出所有城市及其所保留的公路,请计算需要新建几条公路。

输入格式:

包含一个测试用例,第一行三个数分别表示城市总数N,公路数M,被检查的城市数量K。接下来是M行,表示公路所连接的两个城市,城市标记1-N。最后一行给出K个数表示我们所关心的城市。(N小于等于1000)

输出格式:

输出K个数,显示每个城市被攻陷后需要修建的公路条数。

输入样例:

3 2 3
1 2
1 3
1 2 3

输出样例:

1
0
0

最初超时代码:

#include <iostream>
#include <queue>
#include <algorithm>
#include <cstring>

using namespace std;

const int maxn = 1010;
struct Way{
    int p1, p2;
};

int G[maxn][maxn]={0};
bool inq[maxn]={false};
vector<Way> W;

int numCity,numWay,numConcern;

void DFS(int u, int x){
    inq[u]=true;
    for(int i=1; i<=numCity; i++){
        if(inq[i]==false && G[u][i]!=0)
            DFS(i,x);
    }
}

int DFSTraversal(int u){
    memset(inq, false, sizeof(inq));
    for(int i=1; i<=numCity; i++){//删除该点所有公路
        G[u][i]=0;
        G[i][u]=0;
    }
    int numConnected=0;
    for(int i=1; i<=numCity; i++){
        if(inq[i]==false && i!=u){
            DFS(i,u);
            numConnected++;
        }
    }
    return numConnected;
}

void InitializeGraph(){
    for(int i=0; i<W.size(); i++){
        G[W[i].p1][W[i].p2]=1;
        G[W[i].p2][W[i].p1]=1;
    }
}

int main()
{
    cin>>numCity>>numWay>>numConcern;

    int p1,p2;
    int concern;
    int build[maxn]={0};
    for(int i=0; i<numWay; i++){//读入公路
        Way wp;
        cin>>p1>>p2;
        wp.p1=p1; wp.p2=p2;
        W.push_back(wp);
    }

    for(int i=0; i<numConcern; i++){
        cin>>concern;
        InitializeGraph();
        build[i]=DFSTraversal(concern);
    }
    for(int i=0; i<numConcern; i++){
        printf("%d\n",build[i]-1);
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值