打卡信奥刷题(3264)用C++实现信奥题 P8710 [蓝桥杯 2020 省 AB1] 网络分析
P8710 [蓝桥杯 2020 省 AB1] 网络分析
题目描述
小明正在做一个网络实验。
他设置了 nnn 台电脑,称为节点,用于收发和存储数据。
初始时,所有节点都是独立的,不存在任何连接。
小明可以通过网线将两个节点连接起来,连接后两个节点就可以互相通信了。两个节点如果存在网线连接,称为相邻。
小明有时会测试当时的网络,他会在某个节点发送一条信息,信息会发送到每个相邻的节点,之后这些节点又会转发到自己相邻的节点,直到所有直接或间接相邻的节点都收到了信息。所有发送和接收的节点都会将信息存储下来。一条信息只存储一次。
给出小明连接和测试的过程,请计算出每个节点存储信息的大小。
输入格式
输入的第一行包含两个整数 nnn,mmm,分别表示节点数量和操作数量。节点从 111 至 nnn 编号。
接下来 mmm 行,每行三个整数,表示一个操作。
如果操作为 1 a b,表示将节点 aaa 和节点 bbb 通过网线连接起来。当 a=ba=ba=b 时,表示连接了一个自环,对网络没有实质影响。
如果操作为 2 p t,表示在节点 ppp 上发送一条大小为 ttt 的信息。
输出格式
输出一行,包含 nnn 个整数,相邻整数之间用一个空格分割,依次表示进行完上述操作后节点 111 至节点 nnn 上存储信息的大小。
输入输出样例 #1
输入 #1
4 8
1 1 2
2 1 10
2 3 5
1 4 1
2 2 2
1 1 2
1 2 4
2 2 1
输出 #1
13 13 5 3
说明/提示
对于 30%30\%30% 的评测用例,1≤n≤201 ≤ n ≤ 201≤n≤20,1≤m≤1001 ≤ m ≤ 1001≤m≤100。
对于 50%50\%50% 的评测用例,1≤n≤1001 ≤ n ≤ 1001≤n≤100,1≤m≤10001 ≤ m ≤ 10001≤m≤1000。
对于 70%70\%70% 的评测用例,1≤n≤10001 ≤ n ≤ 10001≤n≤1000,1≤m≤100001 ≤ m ≤ 100001≤m≤10000。
对于所有评测用例,1≤n≤100001 ≤ n ≤ 100001≤n≤10000,1≤m≤1051 ≤ m ≤ 10^51≤m≤105 ,1≤t≤1001 ≤ t ≤ 1001≤t≤100。
蓝桥杯 2020 第一轮省赛 A 组 J 题(B 组 J 题)。
C++实现
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
int x=0;char c=getchar();
while(c<48) c=getchar();
while(c>47) x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x;
}
const int N=1e4+4;
const int M=1e5+5;
int n,m,fa[N],cha[N],sum[N];
inline int FIND(int x){//并查集(路径压缩)
if(fa[x]==x) return x;
int fx=FIND(fa[x]);
cha[x]+=cha[fa[x]];
return fa[x]=fx;
}
inline void merge(int x,int y){
int fx=FIND(x),fy=FIND(y);
if(fx==fy){
return ;
}
if(sum[fx]<sum[fy]){//这里是保证cha[fx]非负
swap(fx,fy);
}
cha[fy]=sum[fx]-sum[fy];//这里相当于在fx、fy间建一条权值为sum[fx]-sum[fy]的边
fa[fy]=fx;
}
signed main(){
n=read(),m=read();
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=m;i++){
int op=read(),x=read(),y=read();
if(op==1){//连通块合并
merge(x,y);
}
if(op==2){//连通块整体加t
int fx=FIND(x);sum[fx]+=y;
}
}
for(int i=1;i<=n;i++){
int fi=FIND(i);
sum[i]=sum[fi]-cha[i];//输出时统计i当前权值
printf("%lld ",sum[i]);
}
return 0;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
更多推荐



所有评论(0)