Submission #719525

#TimeUsernameProblemLanguageResultExecution timeMemory
719525keisuke6Bridges (APIO19_bridges)C++17
0 / 100
487 ms34056 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
bool f(vector<int> S){
  for(int x:S)if(x==1) return false;
  return true;
}
struct Unionfind{
  vector<int> par, siz;
  //初期化
  Unionfind(int n) : par(n,-1) , siz(n,1) {}
  int root(int x) {
    if(par[x] == -1) return x;
    else return par[x] = root(par[x]);
  }
  bool issame(int x,int y) {
    return root(x) == root(y);
  }
  bool unite(int x, int y){
    x = root(x); y = root(y);
    if(x ==  y) return false;
    if(siz[x] < siz[y]) swap(x,y);
    par[y] =  x;
    siz[x] += siz[y];
    return  true;
  }
  int size(int x) {
    return siz[root(x)];
  }
};
signed main(){
  int N,M,Q;
  cin>>N>>M;
  vector<vector<int>> G(M);
  unordered_map<int,int> m;
  for(int i=0;i<M;i++){
    int a,b,c;
    cin>>a>>b>>c;
    a--;
    b--;
    m[a*N+b] = c;
    m[b*N+a] = c;
    G[a].push_back(b);
    G[b].push_back(a);
  }
  cin>>Q;
  vector<int> T(Q),A(Q),B(Q);
  for(int i=0;i<Q;i++) cin>>T[i]>>A[i]>>B[i];
  if(f(T)){
    Unionfind uf(N);
    vector<pair<int,int>> S(Q);
    for(int i=0;i<Q;i++) S[i] = {B[i],A[i]};
    map<int,int> ans;
    sort(S.begin(),S.end());
    vector<tuple<int,int,int>> C = {};
    for(int i=0;i<N;i++)for(int j:G[i]) C.push_back({m[i*N+j],i,j});
    sort(C.begin(),C.end());
    int ind = 0;
    for(int i=0;i<Q;i++){
      while(ind != N){
        int a,b,c;
        tie(a,b,c) = C[ind];
        if(a > S[i].first) break;
        uf.unite(b,c);
        ind++;
      }
      ans[S[i].first*N+S[i].second] = uf.size(S[i].second);
    }
    for(int i=0;i<Q;i++) cout<<ans[B[i]*N+A[i]]<<endl;
    return 0;
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...