Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
52278 | AK2022071308 | 木板游戏 | C++ | 运行超时 | 20 | 2000 MS | 47180 KB | 1489 | 2022-07-19 11:51:32 |
#include<bits/stdc++.h> using namespace std; int n,ans; struct node{ int l; int r; }a[5000010]; bool check(node x,node y) { if(x.l !=y.l ) return x.l <y.l ; return x.r>y.r; } struct ed{ int next; int to; }e[5000010]; int cnt,head[5000010],quan[5000010]; bool vis[5000010]; int indeg[5000010]; void add(int u,int v) { cnt++; e[cnt].to=v; e[cnt].next=head[u]; head[u]=cnt; } void dfs(int x,int cnt) { vis[x]=1; ans=max(ans,cnt); for(int i=head[x];i;i=e[i].next) { if(vis[e[i].to ]==0) dfs(e[i].to,cnt+quan[e[i].to ]); } vis[x]=0; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&a[i].l,&a[i].r); quan[i]=1; } sort(a+1,a+n+1,check); node z; z.l=-1; z.r=-1; int k=-1; for(int i=1;i<=n;i++) { if(a[i].l==z.l&&a[i].r==z.r) { quan[k]++; a[i].l =a[i].r=-1; } else { z.l=a[i].l ; z.r=a[i].r ; k=i; } } for(int i=1;i<=n;i++) { if(a[i].l !=-1) { for(int j=i+1;j<=n;j++) { if(a[i].l !=-1) { if(a[i].l>=a[j].l&&a[i].r<=a[j].r) { // cout<<i<<" "<<j<<" "<<"1"<<endl; add(j,i); indeg[i]++; } else if(a[j].l>=a[i].l&&a[j].r<=a[i].r) { // cout<<i<<" "<<j<<" "<<"2"<<endl; add(i,j); indeg[j]++; } } } } } for(int i=1;i<=n;i++) { if(indeg[i]==0) { memset(vis,0,sizeof(vis)); dfs(i,quan[i]); } } printf("%d",ans); }