#include<bits/stdc++.h>
using namespace std;
int n,m1,m2;
struct w
{
int t1,t2;
}dome[100009],inter[100009];
int dp[100009][3],pre,vis[100009][5],fp[100009][5],maxk;
bool cmp(w a,w b)
{
return a.t1<b.t1;
}
int main()
{
freopen("airport.in","r",stdin);
freopen("airport.out","w",stdout);
cin>>n>>m1>>m2;
for(int i=1;i<=m1;i++)
{
cin>>dome[i].t1>>dome[i].t2;
// cout<<"-";
}
sort(dome+1,dome+m1+1,cmp);
for(int i=1;i<=m2;i++)
{
cin>>inter[i].t1>>inter[i].t2;
// cout<<"+";
}
sort(inter+1,inter+m2+1,cmp);
for(int i=1;i<=m1;i++) for(int j=dome[i-1].t1+1;j<=dome[i].t1;j++) fp[j][1]=i;
for(int i=1;i<=m2;i++) for(int j=inter[i-1].t1+1;j<=inter[i].t1;j++) fp[j][2]=i;
for(int q=1;q<=n;q++)
{
// cout<<"^";
dp[q][1]=dp[q-1][1];
dp[q][2]=dp[q-1][2];
pre=1;
do
{
bool flg=0;
for(int i=fp[pre][1];i<=m1;i++)
{
if(vis[i][1]) continue;
else
{
dp[q][1]++;
pre=dome[i].t2;
vis[i][1]=1;
flg=1;
}
if(flg) break;
}
if(!flg) break;
}while(fp[pre][1]);
pre=1;
while(fp[pre][2])
{
bool flg=0;
for(int i=fp[pre][2];i<=m2;i++)
{
if(vis[i][2]) continue;
else
{
dp[q][2]++;
pre=inter[i].t2;
vis[i][2]=1;
flg=1;
break;
}
}
if(!flg) break;
}
}
int maxn=0;
for(int i=0;i<=n;i++)
{
maxn=max(maxn,dp[i][1]+dp[n-i][2]);
// if(maxn<dp[i][1]+dp[n-i][2]) maxk=i;
}
cout<<maxn;
return 0;
}
开了文件输入输出全 WA,关了全 RE
但本人考场上测的,大小样例都没问题啊?