超时呜呜呜~
  • 板块P2071 座位安排
  • 楼主lzqy_
  • 当前回复4
  • 已保存回复4
  • 发布时间2020/3/10 21:17
  • 上次更新2025/2/8 10:59:29
查看原帖
超时呜呜呜~
288716
lzqy_楼主2020/3/10 21:17
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
using namespace std;
bool k[100000],a[4001][4001];
inline void read(int &x)
{
  int f;
  char c;
  for (f=1,c=getchar(); c<'0'||c>'9'; c=getchar()) if(c=='-') f=-1;
  for (x=0; c<='9'&&c>='0'; c=getchar()) x=x*10+(c&15);
  x*=f;
}
int ans=0,n,n2,match[4001][2];
int dfs(int x)
{
  for(int o=1; o<=n; o++)
  {
    if(a[x][o] && !k[o])
    {
      k[o]=1;
      if(match[o][0]==0 || dfs(match[o][0]))
      {
        match[o][0]=x;
        return 1;
      }
      if(match[o][1]==0 || dfs(match[o][1]))
      {
        match[o][1]=x;
        return 1;
      }
      //return 0;
    }
  }
  return 0;
}
int main()
{
  int x,u;
  read(n);
  n2=n*2;
  for(int i=1; i<=n2; i++)
  {
    read(x);
    a[i][x]=1;
    read(x);
    a[i][x]=1;
  }
  for(int i=1; i<=n2; i++)
  {
    if(dfs(i))
    {
      ans++;
    }
   memset(k,0,sizeof(k));
  }
  //for(int i=1; i<=m; i++) cout<<match[i]<<endl;
  cout<<ans;
  return 0;
}
2020/3/10 21:17
加载中...