Submission #1226928

#TimeUsernameProblemLanguageResultExecution timeMemory
1226928Khalid_AlabdullatifTraffic (CEOI11_tra)C++17
24 / 100
2981 ms82284 KiB
#include <bits/stdc++.h>
#define ll long long
#define x first
#define y second
#define mn first
#define mx second
using namespace std;
const int N=3e5 + 1,mod=1e9 + 7;
const int hx[4] = {0,0,1,-1},hy[4] = {1,-1,0,0},dx[4] = {1,1,-1,-1},dy[4] = {1,-1,1,-1};
int n,m,A,B;
pair<int,int>a[N];
map<pair<int,int>,vector<pair<int,int>>>v;
map<pair<int,int>,bool>vis;
map<pair<int,int>,pair<int,int>>ans;
vector<int>l,r;
map<int,int>idxr; // give y get idx in r
void dfs(pair<int,int>idx){
	vis[idx] = 1;
	for(auto i:v[idx]){
		if(!vis[i])
			dfs(i);
	}
}
void adfs(pair<int,int>idx){
	vis[idx] = 1;
	sort(v[idx].begin(),v[idx].end());
	reverse(v[idx].begin(),v[idx].end());
	for(auto i:v[idx]){
		if(!vis[i])
			adfs(i);
		ans[idx].mn = min(ans[idx].mn,ans[i].mn);
		ans[idx].mx = max(ans[idx].mx,ans[i].mx);
	}
	//cout<<idx.x<<" "<<idx.y<<" ans: "<<ans[idx].mn<<" "<<ans[idx].mx<<endl;
}
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n>>m>>A>>B;
    for(int i = 1;i <= n;i++){
    	cin>>a[i].x>>a[i].y;
    	if(a[i].x == 0)
    		l.push_back(a[i].y);
    }
    while(m--){
    	int c,d,k;
    	cin>>c>>d>>k;
    	if(k == 1){
    		v[a[c]].push_back(a[d]);
    	}
    	else{
    		v[a[c]].push_back(a[d]);
    		v[a[d]].push_back(a[c]);
    	}
    }
    //cout<<v[{0,1}][0].x<<v[{0,1}][0].y;
    for(int i = 1;i <= n;i++){
    	if(a[i].x == 0)
    		dfs(a[i]);
    }
    for(int i = 1;i <= n;i++){
    	ans[a[i]] = {2e9,0};
    	if(vis[a[i]] && a[i].x == A){
    		r.push_back(a[i].y);
    	}
    }
   	sort(r.begin(),r.end());
   	//reverse(r.begin(),r.end());
   	sort(l.begin(),l.end());
   	reverse(l.begin(),l.end());
   	vis.clear();
   	for(int i = 0;i < r.size();i++){
   		ans[{A,r[i]}].mn = i,ans[{A,r[i]}].mx = i;
   		//vis[{A,r[i]}] = 1;
   	}
   	
   	for(int i = 0; i < l.size();i++){
   		adfs({0,l[i]});
   		cout<<max(0,ans[{0,l[i]}].mx - ans[{0,l[i]}].mn + 1)<<"\n";
   	}
   	
	
}
#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...
#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...