1 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=10010; struct node{int x,y,id;}a[N],b[N]; int alen,blen,ans[N],rd[N]; vector<int>G[N];bool v[N],v1[N]; bool cmp(node n1,node n2){return n1.x<n2.x;} bool cmp1(node n1,node n2){return n1.y<n2.y;} int pd(int x,int y) { if(v[x]||v1[y])return -1; node jd={b[y].x,a[x].y,0}; if(jd.x-a[x].x<0||jd.y-b[y].y<0)return -1; if(jd.x-a[x].x<jd.y-b[y].y){v1[y]=1;return 0;} else if(jd.x-a[x].x>jd.y-b[y].y){v[x]=1;return 1;} else return -1; } int dfs(int x) { ans[x]=0; for(int y:G[x])ans[x]+=dfs(y); return ans[x]+1; } int main() { int n;cin>>n;memset(ans,-1,sizeof(ans));alen=blen=0; for(int i=1;i<=n;i++) { string st;cin>>st; if(st[0]=='E')cin>>a[++alen].x>>a[alen].y,a[alen].id=i; else cin>>b[++blen].x>>b[blen].y,b[blen].id=i; } sort(a+1,a+alen+1,cmp1);sort(b+1,b+blen+1,cmp); for(int i=1;i<=alen;i++)for(int j=1;j<=blen;j++) { int c=pd(i,j);if(c==-1)continue; if(c==0)G[a[i].id].push_back(b[j].id),rd[b[j].id]++; else G[b[j].id].push_back(a[i].id),rd[a[i].id]++; } for(int i=1;i<=n;i++)if(ans[i]==-1&&rd[i]==0)dfs(i); for(int i=1;i<=n;i++)cout<<ans[i]<<'\n'; return 0; }
- 1
信息
- ID
- 7080
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 28
- 已通过
- 11
- 上传者