제출 #1326048

#제출 시각아이디문제언어결과실행 시간메모리
1326048nminhnguyenleDrivers (BOI24_drivers)C++20
100 / 100
122 ms21504 KiB
// NAM MÔ A DI ĐÀ PHẬT

#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3","unroll-loops")

// defines
#define int long long
#define inf LLONG_MAX/20
#define fastio() ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define pb push_back
#define pf push_front
#define popb pop_back
#define popf pop_front
#define fr front
#define bk back
#define fi first
#define se second

// typedefs
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pi;
typedef pair<string, ll> psi;
typedef pair<ll, pi> pii;
typedef pair<pi, pi> piii;

// dsu template
struct ufds{
	vector<int> par, sz;
	ufds(int n){
		par.resize(n+1,0); // resize parents array and init. to 0
		sz.resize(n+1,1); // sizes of the sets, init. all to 1
		for(int i=1;i<=n;i++){
			par[i]=i; // every parent is itself
		}
	}
	int find_par(int u){ // find parent node
		if(par[u]==u){
			return u;
		}
		return par[u]=find_par(par[u]); // path compression
	}
	int unite(int x, int y){ // uniting set x and y
		x=find_par(x);
		y=find_par(y);
		if(x==y) return 0;
		if(sz[x]>sz[y]) swap(x,y); // swap from large to small (merge small into large)
		par[x]=y; // set parent
		sz[y]+=sz[x]; // update set sizes
		return true;
	}
};

signed main(){
    fastio();
    int n,m,u;
    cin>>n>>m>>u;
    vector<array<int,3>> r(m);
    for(int i=0;i<m;i++){
		int x,y,t;
		cin>>x>>y>>t;
		r[i]={t,x,y};
	}
	vector<array<int,4>> q(u);
	for(int i=0;i<u;i++){
		int a,b,p;
		cin>>a>>b>>p;
		q[i]={p,a,b,i};
	}
	sort(r.begin(),r.end());
	sort(q.begin(),q.end());
    ufds dsu(n+1);
    int p=0;
    vector<string> ans(u);
    for(int i=0;i<u;i++){
        while(p<m && r[p][0]<=q[i][0]){
            dsu.unite(r[p][1],r[p][2]);
            p++;
        }
        if(dsu.find_par(q[i][1])==dsu.find_par(q[i][2])){
            ans[q[i][3]]="TAIP";
        }
        else{
            ans[q[i][3]]="NE";
        }
    }
    for(string i:ans){
        cout<<i<<'\n';
    }
    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...