Pagini recente » Cod sursa (job #2836906) | Cod sursa (job #2771695) | Cod sursa (job #1858884) | Cod sursa (job #2103435) | Cod sursa (job #3005071)
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
//ifstream cin("radiatie.in");
//ofstream cout("radiatie.out");
map<int,int>mp[500005];
map<int,int>::iterator it;
long long rasp[500005];
int sef[500006];
struct str
{
int a,b,cost;
};
str edge[1000005];
bool cmp(str a,str b)
{
return a.cost<b.cost;
}
int find(int u)
{
if(u==sef[u])
{
return u;
}
return sef[u]=find(sef[u]);
}
void merge(int a,int b,int val)
{
int q,nr;
if(mp[a].size()<mp[b].size())
{
swap(a,b);
}
for(it=mp[b].begin();it!=mp[b].end();it++)
{
q=it->first;
nr=it->second;
rasp[q]=rasp[q]+nr*mp[a][q]*val;
mp[a][q]+=nr;
}
sef[b]=a;
}
int main()
{
int n,i,j,k,l,m,q,nr,x,a,b;
cin>>n>>m>>q;
for(i=1;i<=m;i++)
{
cin>>edge[i].a>>edge[i].b>>edge[i].cost;
}
for(i=1;i<=q;i++)
{
for(j=1;j<=2;j++)
{
cin>>x;
mp[x][i]++;
}
}
sort(edge+1,edge+m+1,cmp);
for(i=1;i<=n;i++)
{
sef[i]=i;
}
for(i=1;i<=m;i++)
{
a=edge[i].a;
b=edge[i].b;
a=find(a);
b=find(b);
if(a!=b)
{
merge(a,b,edge[i].cost);
}
}
for(i=1;i<=q;i++)
{
cout<<rasp[i]<<'\n';
}
return 0;
}