宣传部肖同学
时间: 1ms 内存:128M
描述:
肖同学编程非常厉害,第十届 ACM 省赛肖同学和超超组队成了冠军队伍,肖同学对“超超说自己女装,但是不女装”非常不满,肖同学就告诉了他的好朋友,好朋友又告诉了其他好朋友,问一共有多少同学知道超超要女装。
输入:
输入第一行包含两个整数 n, m,n 是同学的个数,同学编号 1 2 3......n,肖同学是1号,接下来是 m 行输入,每行输入两个数 a b 代表 a b 是好朋友。
其中 2<=n<=500, 1<=m<=500
输出:
输出一共有多少同学知道超超要女装。
示例输入:
4 5
1 2
2 3
1 3
3 2
1 2
示例输出:
3
提示:
参考答案(内存最优[2024]):
#include<iostream>
using namespace std;
int h[501];
int find(int i){
if(h[i]!=i)
return find(h[i]);
return i;
}
int main(){
int a,b,n,m,all=0;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
h[i]=i;
for(int i=1;i<=m;i++)
{
scanf("%d %d",&a,&b);
int ta=find(a);
int tb=find(b);
if(ta!=tb)
h[tb]=ta;
}
for(int i=1;i<=n;i++)
{
if(find(i)==find(1))
all++;
}
cout<<all;
}
参考答案(时间最优[4]):
#include <bits/stdc++.h>
#define IO \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
#define mem(a, x) memset(a, x, sizeof(a))
#define per(x, a, b) for (int x = a; x <= b; x++)
#define rep(x, a, b) for (int x = a; x >= b; x--)
using namespace std;
typedef long long LL;
typedef pair<int, int> P;
const int maxn = 1e5 + 10;
const int mod = 1e9 + 7;
const double eps = 1e-8;
struct node {
int from;
int to;
int next;
int cost;
} edge[maxn << 1];
int head[maxn], tot;
void init() {
memset(head, -1, sizeof(head));
tot = 0;
}
void addedge(int u, int v, int cost) {
edge[tot].from = u;
edge[tot].to = v;
edge[tot].cost = cost;
edge[tot].next = head[u];
head[u] = tot++;
}
int n, m;
bool vis[maxn];
void dfs(int x, int fa) {
if (vis[x])
return;
vis[x] = true;
for (int i = head[x]; i != -1; i = edge[i].next) {
int to = edge[i].to;
if (to == fa)
continue;
dfs(to, x);
}
}
void solve() {
mem(vis, 0);
dfs(1, -1);
int ans = 0;
for (int i = 1; i <= n; i++) {
if (vis[i])
++ans;
}
cout << ans << endl;
}
int main() {
#ifdef LOCAL_IM0QIANQIAN
freopen("test.in", "r", stdin);
// freopen("test.out", "w", stdout);
#else
IO;
#endif // LOCAL_IM0QIANQIAN
init();
cin >> n >> m;
assert(n <= 500);
assert(n >= 2);
assert(m >= 1);
assert(m <= 500);
for (int i = 0; i < m; i++) {
int x, y;
cin >> x >> y;
addedge(x, y, 0);
addedge(y, x, 0);
}
solve();
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。