Pagini recente » Cod sursa (job #3241899) | Cod sursa (job #3213198) | Cod sursa (job #3123616) | Cod sursa (job #3269684) | Cod sursa (job #3277212)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
struct muchie
{
int x,y,cost;
bool operator < (muchie m) const
{
return cost<m.cost;
}
};
int n,m,k,t[15002];
muchie a[30003];
vector < pair<int,int> > liste[15002];
int dist[15002][15002];
void Union(int x, int y)
{
t[y]=x;
}
int Find(int x)
{
int y,rad=x;
while(t[rad]!=0)
rad=t[rad];
while(x!=rad)
{
y=t[x];
t[x]=rad;
x=y;
}
return rad;
}
void Kruskal()
{
int i,nrc,x,y,j;
sort(a+1,a+m+1);
nrc=n;
for(i=1;i<=m&&nrc>1;i++)
{
x=Find(a[i].x);
y=Find(a[i].y);
if(x!=y)
{
//cout<<a[i].x<<" "<<a[i].y<<"\n";
Union(x,y);
nrc--;
liste[a[i].x].push_back({a[i].y,a[i].cost});
liste[a[i].y].push_back({a[i].x,a[i].cost});
}
}
}
void Bfs(int nod)
{
bitset <15002> viz;
int d,x;
queue < pair <int,int> > q;
q.push({nod,0});
viz[nod]=1;
while(!q.empty())
{
x=q.front().first;
d=q.front().second;
q.pop();
for(auto e:liste[x])
if(dist[e.first][nod]==0&&viz[e.first]==0)
{
viz[e.first]=1;
dist[e.first][nod]=dist[nod][e.first]=max(d,e.second);
q.push({e.first,max(d,e.second)});
}
}
/**cout<<endl;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<dist[i][j]<<" ";
cout<<endl;
}*/
}
int main()
{
int i,f,e;
fin>>n>>m>>k;
for(i=1;i<=m;i++)
{
fin>>a[i].x>>a[i].y>>a[i].cost;
}
Kruskal();
/**for(i=1;i<=n;i++)
{
for(auto j:liste[i])
cout<<j.first<<" ";
cout<<endl;
}*/
for(i=1;i<=k;i++)
{
fin>>e>>f;
if(dist[e][f]==0)
Bfs(e);
fout<<dist[e][f]<<"\n";
}
return 0;
}