Pagini recente »
Cod sursă (job #251655)
|
Istoria paginii runda/aht2
|
Cod sursă (job #718647)
Cod sursă (job
#718647)
#include <bits/stdc++.h>
using ll=long long;
#define S second
#define F first
#define endl '\n'
#define spid ios_base::sync_with_stdio(false);cin.tie(NULL);
const int mod=1e9+7;
const double pi=3.14159265359;
const int maxn=10001;
using namespace std;
ll t=1,n,m,k;
ll parent[maxn],rang[maxn];
set<pair<ll,pair<int,int>>> A;
int find(int i){
int ans;
if(parent[i]==i){
return i;
}
else ans=find(parent[i]);
parent[i]=ans;
return ans;
}
void unite(int a,int b){
int repa=find(a);
int repb=find(b);
if(rang[repa]==rang[repb]){
parent[repa]=repb;
rang[repb]++;
}
else if(rang[repa]>rang[repb]){
parent[repb]=repa;
}
else{
parent[repa]=repb;
}
}
ll createMST(){
ll ans=0;
for(auto it:A){
int a=it.S.F,b=it.S.S;
ll val=it.F;
if(find(a)==find(b))continue;
else{
unite(a,b);
}
ans+=val;
}
return ans;
}
int main(){
ifstream cin("zapada.in");
ofstream cout("zapada.out");
cin>>n>>m>>k;
for(int i=0;i<m;i++){
int c1,c2,c3;
cin>>c1>>c2>>c3;
A.insert({c3,{c1-1,c2-1}});
}
for(int i=0;i<n;i++){
parent[i]=i;
rang[i]=1;
}
cout<<createMST()<<endl;
while(k--){
int c1,c2,c3;
cin>>c1>>c2>>c3;
for(int i=0;i<n;i++){
parent[i]=i;
rang[i]=1;
}
A.insert({c3,{c1,c2}});
cout<<createMST()<<endl;
}
}