This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
//#pragma GCC optimize("Ofast")
#define fi first
#define se second
#define ll long long
using namespace std;
const int N = 2e5 + 7;
const int M = 23;
const int mod = 998244353;
int n,m,k,q;
int a[N];
int p[N];
int d[N];
int ans[N];
bool used[N];
set < int > ss[N];
vector < pair < int , int > > v[N];
int get( int x )
{
return (p[x] == x ? x : p[x] = get(p[x]));
}
void meg( int x , int y , int z )
{
x = get(x);
y = get(y);
if( x == y )return;
if( (int)ss[x].size() > (int)ss[y].size() )swap(x , y);
auto it = ss[x].begin();
while( it != ss[x].end() ){
int xx = *it;
if( ss[y].find(xx) != ss[y].end() ){
ans[xx] = z;
ss[y].erase(xx);
}else{
ss[y].insert(xx);
}
it++;
}
p[x] = y;
}
void solve1()
{
cin >> n >> m;
for( int i = 1; i <= m; i++ ){
int x,y,z;
cin >> x >> y >> z;
v[x].push_back({y , z});
v[y].push_back({x , z});
}
for( int i = 1; i <= n; i++ ){
p[i] = i;
d[i] = 1e9;
}
set < pair < int , int > > s;
cin >> k;
for( int i = 1; i <= k; i++ ){
int x;
cin >> x;
d[x] = 0;
s.insert({0 , x});
}
while( !s.empty() ){
auto x = *s.begin();
s.erase(s.begin());
for( auto y : v[x.se] ){
if( y.se + d[x.se] < d[y.fi] ){
s.erase({d[y.fi] , y.fi});
d[y.fi] = y.se + d[x.se];
s.insert({d[y.fi] , y.fi});
}
}
}
vector < pair < int , int > > f;
for( int i = 1; i <= n; i++ ){
f.push_back({d[i] , i});
}
sort( f.rbegin() , f.rend() );
cin >> q;
for( int i = 1; i <= q; i++ ){
int x,y;
cin >> x >> y;
ss[x].insert(i);
ss[y].insert(i);
}
for( int i = 0; i < (int)f.size(); i++ ){
used[f[i].se] = true;
for( auto y : v[f[i].se] ){
if( used[y.fi] ){
meg(y.fi , f[i].se , f[i].fi);
}
}
}
for( int i = 1; i <= q; i++ ){
cout << ans[i] << "\n";
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
//freopen( "input.txt" , "r" , stdin );
//freopen( "output.txt" , "w" , stdout );
int cghf = 1;//cin >> cghf;
while( cghf-- ){
solve1();
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |