Submission #2120788


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
#define MOD 1000000007

const int MAX_N=100000;
int N,M,Q;

int par[MAX_N]; // 親
int rnk[MAX_N]; // rank, 木の深さ
int num[MAX_N];

// N要素で初期化
void init(){
  for(int i=0;i<N;i++){
    par[i]=i;
    rnk[i]=0;
    num[i]=1;
  }
}

// 木の根を求める
int find(int x){
  if (par[x] == x){
    return x;
  }else{
    return par[x] = find(par[x]);
  }
}

// xとyの属する集合を併合
void unite(int x, int y){
  x = find(x);
  y = find(y);
  if (x == y) return;

  if (rnk[x] < rnk[y]){
    par[x] = y;
    num[y]+=num[x];
  }else{
    par[y] = x;
    num[x]+=num[y];
    if (rnk[x] == rnk[y]) rnk[x]++;
  }
}

// xとyが同じ集合に属するかどうか
bool same(int x, int y){
  return find(x) == find(y);
}


int main(){
  cin>>N>>M;
  init();
  vector<pair<int,pair<int,int>>> v(M);
  for(int i=0;i<M;i++){
    int a,b,y;
    cin>>a>>b>>y;
    a--, b--;
    v[i]={y,{a,b}};
  }
  sort(v.rbegin(),v.rend());
  cin>>Q;
  vector<pair<int,pair<int,int>>> p(Q);
  for(int i=0;i<Q;i++){
    int a,b;
    cin>>a>>b;
    a--;
    p[i]={b,{i,a}};
  }
  sort(p.rbegin(),p.rend());
  int ind=0;
  int ans[Q]={};
  for(int i=0;i<Q;i++){
    int w=p[i].first;
    int from=p[i].second.second;
    for(int j=ind;j<M;j++){
      int y=v[j].first;
      int a=v[j].second.first;
      int b=v[j].second.second;
      if(y>w){
        if(!same(a,b)) unite(a,b);
      }else break;
      ind++;
    }
    int root=find(from);
    ans[p[i].second.first]=num[root];
  }
  for(int i=0;i<Q;i++) cout<<ans[i]<<endl;
  return 0;
}

Submission Info

Submission Time
Task D - 道路の老朽化対策について
User misosoup
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1744 Byte
Status AC
Exec Time 415 ms
Memory 5888 KB

Judge Result

Set Name Sample Subtask1 All
Score / Max Score 0 / 0 50 / 50 50 / 50
Status
AC × 3
AC × 10
AC × 22
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
Subtask1 sample_01.txt, sample_02.txt, sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt
All sample_01.txt, sample_02.txt, sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 256 KB
sample_02.txt AC 1 ms 256 KB
sample_03.txt AC 1 ms 256 KB
subtask1_01.txt AC 5 ms 256 KB
subtask1_02.txt AC 5 ms 256 KB
subtask1_03.txt AC 5 ms 256 KB
subtask1_04.txt AC 4 ms 256 KB
subtask1_05.txt AC 5 ms 256 KB
subtask1_06.txt AC 5 ms 256 KB
subtask1_07.txt AC 5 ms 256 KB
subtask2_01.txt AC 394 ms 5760 KB
subtask2_02.txt AC 407 ms 5760 KB
subtask2_03.txt AC 404 ms 5760 KB
subtask2_04.txt AC 415 ms 5760 KB
subtask2_05.txt AC 285 ms 4096 KB
subtask2_06.txt AC 365 ms 5888 KB
subtask2_07.txt AC 381 ms 5888 KB
subtask2_08.txt AC 395 ms 5888 KB
subtask2_09.txt AC 412 ms 5760 KB
subtask2_10.txt AC 407 ms 5760 KB
subtask2_11.txt AC 411 ms 5632 KB
subtask2_12.txt AC 411 ms 5504 KB