WA求助大佬
查看原帖
WA求助大佬
370648
柠檬布丁吖楼主2022/9/30 19:35
//P7150 USACO20DEC]Stuck in a Rut S

#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int ret=0,f=1;
	char c=getchar();
	for(;c<'0'||c>'9';c=getchar()) if(c=='-') f=-f;
	for(;c>='0'&&c<='9';c=getchar()) ret=ret*10+c-'0';
	return ret*f;
}
int N;

const int maxn=1e3+55;
int fa[maxn],ans[maxn];
struct cow{
	int x,y,num;
}a[maxn],b[maxn];
int cnt1,cnt2;
bool flag[maxn];

int _find(int x){
	if(fa[x]==x) return x;
	else return fa[x]=_find(fa[x]);
}

bool cmp1(cow &a,cow &b){
	if(a.y==b.y) return a.x<b.x;
	return a.y<b.y; 
}

bool cmp2(cow &a,cow &b){
	if(a.x==b.x) return a.y<b.y;
	return a.x<b.x;
}

void _union(int _x,int _y){
	int x=_find(_x),y=_find(_y);
	if(x!=y){
		fa[x]=y;
		ans[y]+=ans[x]+1;
	}
}

signed main(void){
	
	N=read();
	for(int i=1;i<=N;i++){
		int _x,_y;
		char ch;
		cin>>ch;
		_x=read();_y=read();
		if(ch=='E') a[++cnt1].x=_x,a[cnt1].y=_y,a[cnt1].num=i;
		else b[++cnt2].x=_x,b[cnt2].y=_y,b[cnt2].num=i;
		fa[i]=i;
	}
	
	sort(a+1,a+1+cnt1,cmp1);
	sort(b+1,b+1+cnt2,cmp2);
	
	for(int i=1;i<=cnt1;i++){
		for(int j=1;j<=cnt2;j++){
			if(flag[j] || a[i].x>b[i].x || a[i].y<b[i].y || a[i].x+a[i].y==b[i].x+b[i].y) continue;
			
			if(b[j].x-a[i].x > a[i].y-b[j].y){
				_union(a[i].num,b[j].num);
				break;
			} else {
				_union(b[j].num,a[i].num);
				flag[j]=1;
			}
		}
	}
	
	for(int i=1;i<=N;i++){
		printf("%d\n",ans[i]);
	}
	
	return 0;
}
2022/9/30 19:35
加载中...