PAT 1013 Battle Over Cities

2023-12-28 20:32
文章标签 pat cities battle 1013

本文主要是介绍PAT 1013 Battle Over Cities,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这一道题难吗?不难,呜呜呜,但还是卡了好久,去他娘的段错误,孩子被?啄了眼,注意:并没有说M小于1000。

用数组的话不知道开多大,直接用vector。

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
struct Highway{int c1,c2;
};
vector<Highway> highway;
int check[1005]; 
int getRoot(int city)
{if(check[city]==-1) return city;else return check[city] = getRoot(check[city]);
}
void my_union(int c1,int c2)
{int root1 =getRoot(c1);int root2 = getRoot(c2);if(root1!=root2) check[root1] = root2;  //合并 
}
int isOne(int n,int m,int city)
{memset(check,-1,sizeof(check));for(int i=0;i<m;i++)if(highway[i].c1!=city&&highway[i].c2!=city)my_union(highway[i].c1,highway[i].c2);int count = 0;for(int i=1;i<=n;i++)if(i!=city&&check[i]==-1)count++; return count-1; 
}
int main()
{int n,m,k,c1,c2,city;cin>>n>>m>>k;for(int i=0;i<m;i++){cin>>c1>>c2;highway.push_back({c1,c2});}if(n==1&&m==0){cout<<0;return 0;} for(int i=0;i<k;i++){cin>>city;cout<<isOne(n,m,city)<<endl;		}
} 

 

 

这篇关于PAT 1013 Battle Over Cities的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/547207

相关文章

PAT甲级-1044 Shopping in Mars

题目   题目大意 一串项链上有n个钻石,输入给出每个钻石的价格。用m元买一个连续的项链子串(子串长度可为1),如果不能恰好花掉m元,就要找到最小的大于m的子串,如果有重复就输出多个,按递增顺序输出子串的前端和后端索引。 原来的思路 取连续的子串使和恰等于m,没有恰等于就找最小的大于。可以将子串依次累加,使得每个位置都是起始位置到该位置的序列和,整个数组显递增顺序,就可以用右边减左边

PAT (Advanced Level) Practice——1011,1012

1011:  链接: 1011 World Cup Betting - PAT (Advanced Level) Practice (pintia.cn) 题意及解题思路: 简单来说就是给你3行数字,每一行都是按照W,T,L的顺序给出相应的赔率。我们需要找到每一行的W,T,L当中最大的一个数,累乘的结果再乘以0.65,按照例子写出表达式即可。 同时还需要记录每一次选择的是W,T还是L

【Codeforces】449B Jzzhu and Cities 最短路

传送门:【Codeforces】449B Jzzhu and Cities 题目大意:一个n个节点的无向图,节点编号1~n(其中1为起点),其中有m条普通普通,还有k条从起点出发的特殊边,问最多去掉多少的特殊边使得从起点到其他所有点的最短路径的距离不变。 题目分析:这题的意图很明显啊,就是要我们去求最短路啊。那么怎么求会比较好呢?其实我们可以很容易的发现如果从起点通过边权为c的特殊

【HDU】3986 Harry Potter and the Final Battle 最短路

传送门:【HDU】3986 Harry Potter and the Final Battle 题目分析:先求一次最短路,同时记录在最短路上的顶点以及以该顶点为弧尾的最短路上的边。然后枚举删除每一条边,分别求一次最短路,其中最大的即答案。当然不可达输出-1。 测试发现堆优化的dij不如slf优化的spfa。。可能图太稀疏了吧。。。反正我觉得我写的挺搓的了。。。 代码如下:

PAT (Advanced Level) Practice

1001:  题目大意: 计算 a+b 的结果,并以标准格式输出——即每三个数字一组,组之间用逗号分隔(如果数字少于四位,则不需要逗号分隔)  解析: 我们知道相加右正有负,对于样例来说 Sample Input: -1000000 9 Sample Output: -999,991 如果是从左往右,算上负号的话输出应该是-99,999,1 从右往左:-,999,991离正确

hdu 1013(水题)

题意:求一个数,各个数位相加,如果结果小于10则输出,否者递归进行数位相加。   #include <cstdio>#include <cstring>#include <string>#include <iostream>using namespace std;int result(int n){int sum = 0;while (n > 0){sum += n % 1

1013. Battle Over Cities (25) DFs

1013. Battle Over Cities (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It is vitally important to have all the cities connected by highways in a

poj 1013 Counterfeit Dollar

首先我们用coin[]数组来记录,具体的对应关系的话,我们将A-L分别对应数字0-11,所以对于每个char,我们减一个‘A’就行了,这样可以对应到int coin[]上去。 首先我们明确一下: 1.如果是even的话,每一个硬币都是真的 2.如果不是的话,它有可能是真的,或者是假的。因为我先遍历了一次三个string ,遇到even的话,就把对应的coin数组中的编号给置为1了,代表这个硬

1050 String Subtraction——PAT甲级

Given two strings S1​ and S2​, S=S1​−S2​ is defined to be the remaining string after taking all the characters in S2​ from S1​. Your task is simply to calculate S1​−S2​ for any given strings. However,

【九度】题目1013:开门人和关门人

题目地址:http://ac.jobdu.com/problem.php?pid=1013 题目描述: 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人。 输入:     测试输入的第一行给出记录的总天数N ( N> 0 ),下面列出了N天的记录。      每天的记录在第一行给出记录的条目数M (M