1 条题解

  • 0
    @ 2026-4-1 20:58:34
    #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
    上传者