PAT 1013 Battle Over Cities (25 分)

  • 题目:

It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We must know immediately if we need to repair any other highways to keep the rest of the cities connected. Given the map of cities which have all the remaining highways marked, you are supposed to tell the number of highways need to be repaired, quickly.

For example, if we have 3 cities and 2 highways connecting city​1​​-city​2​​ and city​1​​-city​3​​. Then if city​1​​ is occupied by the enemy, we must have 1 highway repaired, that is the highway city​2​​-city​3​​.
Input Specification:

Each input file contains one test case. Each case starts with a line containing 3 numbers N (<1000), M and K, which are the total number of cities, the number of remaining highways, and the number of cities to be checked, respectively. Then M lines follow, each describes a highway by 2 integers, which are the numbers of the cities the highway connects. The cities are numbered from 1 to N. Finally there is a line containing K numbers, which represent the cities we concern.
Output Specification:

For each of the K cities, output in a line the number of highways need to be repaired if that city is lost.
Sample Input:

3 2 3
1 2
1 3
1 2 3

Sample Output:

1
0
0

  • 题目大意
    给定一些城市节点,城市间的高速公路可以看成为图的边,问去掉一个节点后需要增加几条边使得所有城市联通
  • 解题方法
    只用求去掉一个节点后,剩下的图中有多少个最大联通图,所需要增加的边数就是最大联通图的数目减一
  • 代码实现
    利用DFS遍历图即可。
//算法思想,计算最大联通分量,则需要修的高速公路数为联通分量减一
#include <cstdio>
#include <cstring>
const int MAX = 1001;
int N, M, K;
int G[MAX][MAX] = {0};            //没有通路则为0
int visit[MAX] = {false};
void DFS(int i, int node)
{   if(i == node)                         //不用真的删除节点,只用遇到这个节点返回即可
        return;
    visit[i] = true;
    for(int j = 1; j <= N; j++){
        if(G[i][j] == 1 && visit[j] == false){       //如果两节点之间存在边,且为访问
            DFS(j, node);
        }
    }
}
int travel(int curnode){
    int num = 0;
    for(int i = 1; i <= N; i++){
        if(visit[i] ==false && i != curnode)
        {
            num++;
            DFS(i, curnode);
        }
    }
    return num - 1;
}
int main()
{
    scanf("%d%d%d", &N, &M, &K);
    for(int i = 0; i < M; i++){
        int node1, node2;
        scanf("%d%d", &node1, &node2);
        G[node1][node2] = 1;
        G[node2][node1] = 1;                 //两节点之间存在边
    }
    for(int i = 0; i < K; i++){
        int node;
        scanf("%d", &node);
        memset(visit, false, sizeof(visit));     //初始化visit数组为false
        int ans = travel(node);
        printf("%d\n", ans);
    }
    return 0;
}

SQL Prompt是Red Gate Software公司开发的一款强大的SQL代码编辑和优化工具,主要面向数据库开发者和管理员。版本11.0.1.16766是一个更新版本,它提供了更高效、更便捷的SQL编写环境,旨在提升SQL代码的可读性、效率和一致性。这个安装包包含了所有必要的组件,用于在用户的计算机上安装SQL Prompt工具。 SQL Prompt的核心功能包括自动完成、智能提示、格式化和重构。自动完成功能能够帮助用户快速输入SQL语句,减少键入错误;智能提示则基于上下文提供可能的选项,加快编写速度;格式化功能允许用户按照自定义或预设的编码规范对SQL代码进行美化,提升代码的可读性;而重构工具则可以帮助用户优化代码结构,消除潜在问题。 在描述中提到的“代码格式化规则来源于网络”,指的是用户可以通过下载网络上的json文件来扩展或定制SQL Prompt的代码格式化规则。这些json文件包含了特定的格式设置,如缩进风格、空格使用、注释位置等。将这些文件复制到指定的目录(例如:C:\Users\用户名\AppData\Local\Red Gate\SQL Prompt 10\Styles)后,SQL Prompt会读取这些规则并应用到代码格式化过程中,使得用户可以根据个人偏好或团队规范调整代码样式。 以下几点请注意: 1. 经实测,此版本支持最新的Sql Server 2022版的SSMS21 2. 此安装包中不包括keygen,请自行解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值