結果

問題 No.1744 Selfish Spies 1 (à la Princess' Perfectionism)
ユーザー 👑 PCTprobabilityPCTprobability
提出日時 2021-11-14 21:45:43
言語 C++17
(gcc 13.2.0 + boost 1.83.0)
結果
TLE  
(最新)
AC  
(最初)
実行時間 -
コード長 3,455 bytes
コンパイル時間 5,093 ms
コンパイル使用メモリ 285,248 KB
実行使用メモリ 14,012 KB
最終ジャッジ日時 2023-08-20 06:28:56
合計ジャッジ時間 33,112 ms
ジャッジサーバーID
(参考情報)
judge15 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
4,380 KB
testcase_01 AC 1 ms
4,376 KB
testcase_02 AC 2 ms
4,376 KB
testcase_03 AC 2 ms
4,380 KB
testcase_04 AC 1 ms
4,376 KB
testcase_05 AC 1 ms
4,376 KB
testcase_06 AC 2 ms
4,376 KB
testcase_07 AC 2 ms
4,376 KB
testcase_08 AC 2 ms
4,380 KB
testcase_09 AC 2 ms
4,380 KB
testcase_10 AC 2 ms
4,376 KB
testcase_11 AC 2 ms
4,380 KB
testcase_12 AC 3 ms
4,376 KB
testcase_13 AC 2 ms
4,380 KB
testcase_14 AC 12 ms
4,380 KB
testcase_15 AC 5 ms
4,376 KB
testcase_16 AC 16 ms
4,376 KB
testcase_17 AC 94 ms
4,376 KB
testcase_18 AC 80 ms
4,380 KB
testcase_19 AC 2 ms
4,380 KB
testcase_20 AC 2 ms
4,376 KB
testcase_21 AC 3 ms
4,376 KB
testcase_22 AC 4 ms
4,380 KB
testcase_23 AC 2 ms
4,376 KB
testcase_24 AC 214 ms
5,160 KB
testcase_25 AC 7 ms
4,380 KB
testcase_26 AC 21 ms
4,376 KB
testcase_27 AC 274 ms
4,384 KB
testcase_28 AC 2,325 ms
13,668 KB
testcase_29 AC 230 ms
4,376 KB
testcase_30 AC 191 ms
4,376 KB
testcase_31 AC 260 ms
4,380 KB
testcase_32 AC 215 ms
4,376 KB
testcase_33 AC 1,925 ms
14,012 KB
testcase_34 AC 1,285 ms
13,720 KB
testcase_35 TLE -
testcase_36 TLE -
testcase_37 AC 4,916 ms
13,740 KB
testcase_38 AC 3,485 ms
13,752 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
#if __has_include(<atcoder/all>)
#include <atcoder/all>
using namespace atcoder;
#endif
using ll = int;
using ld = long double;
using ull = unsigned long long;
#define endl "\n"
typedef pair<int, int> Pii;
#define REP(i, n) for (int i = 0; i < (n); ++i)
#define REP3(i, m, n) for (int i = (m); (i) < int(n); ++ (i))
#define FOR(i,a,b) for(ll i=a;i<=(ll)(b);i++)
#define rep(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define ALL(x) begin(x), end(x)
#define PB push_back
#define rrep(i,a,b) for(int i=a;i>=b;i--)
#define fore(i,a) for(auto &i:a)
#define all(s) (s).begin(),(s).end()
#define drep2(i, m, n) for (int i = (m)-1; i >= (n); --i)
#define drep(i, n) drep2(i, n, 0)
#define rever(vec) reverse(vec.begin(), vec.end())
#define sor(vec) sort(vec.begin(), vec.end())
#define fi first
#define se second
#define pb push_back
#define P pair<ll,ll>
void Yes(bool a){cout<<(a?"Yes":"No")<<endl;}
void cincout(){
  ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
  cout<< fixed << setprecision(10);
}
struct HopcroftKarp {
  vector< vector< int > > graph;
  vector< int > dist, match;
  vector< bool > used, vv;

  HopcroftKarp(int n, int m) : graph(n), match(m, -1), used(n) {}

  void add_edge(int u, int v) {
    graph[u].push_back(v);
  }

  void bfs() {
    dist.assign(graph.size(), -1);
    queue< int > que;
    for(int i = 0; i < graph.size(); i++) {
      if(!used[i]) {
        que.emplace(i);
        dist[i] = 0;
      }
    }

    while(!que.empty()) {
      int a = que.front();
      que.pop();
      for(auto &b : graph[a]) {
        int c = match[b];
        if(c >= 0 && dist[c] == -1) {
          dist[c] = dist[a] + 1;
          que.emplace(c);
        }
      }
    }
  }

  bool dfs(int a) {
    vv[a] = true;
    for(auto &b : graph[a]) {
      int c = match[b];
      if(c < 0 || (!vv[c] && dist[c] == dist[a] + 1 && dfs(c))) {
        match[b] = a;
        used[a] = true;
        return (true);
      }
    }
    return (false);
  }

  int bipartite_matching() {
    int ret = 0;
    for(auto &e:match) e=-1;
    for(int i=0;i<used.size();i++) used[i]=false;
    while(true) {
      bfs();
      vv.assign(graph.size(), false);
      int flow = 0;
      for(int i = 0; i < graph.size(); i++) {
        if(!used[i] && dfs(i)) ++flow;
      }
      if(flow == 0) return (ret);
      ret += flow;
    }
  }

  void output() {
    for(int i = 0; i < match.size(); i++) {
      if(~match[i]) {
        cout << match[i] << "-" << i << endl;
      }
    }
  }
};
int main() {
  cincout();
  ll n,m,l;
  cin>>n>>m>>l;
  vector<ll> a(l),b(l);
  for(int i=0;i<l;i++){
    cin>>a[i]>>b[i];
    a[i]--;
    b[i]--;
  }
  vector<bool> ans(l,false);
  mcf_graph<ll,ll> g(2+n+m);
  ll s=n+m,t=n+m+1;
  for(int i=0;i<l;i++){
    g.add_edge(a[i],n+b[i],1,0);
  }
  for(int i=0;i<n;i++) g.add_edge(s,i,1,0);
  for(int i=0;i<m;i++) g.add_edge(n+i,t,1,0);
  auto h=g.flow(s,t);
  auto u=g.edges();
  ll c=0;
  for(int i=0;i<l;i++){
    if(u[i].flow==0) ans[i]=true;
    else c++;
  }
  HopcroftKarp g2(n,m);
  for(int i=0;i<l;i++) g2.add_edge(a[i],b[i]);
  for(int i=0;i<l;i++){
    if(ans[i]==false){
      for(int j=0;j<g2.graph[a[i]].size();j++){
        if(g2.graph[a[i]][j]==b[i]){
          g2.graph[a[i]].erase(g2.graph[a[i]].begin()+j);
          break;
        }
      }
      if(g2.bipartite_matching()==c) ans[i]=true;
      g2.add_edge(a[i],b[i]);
    }
  }
  for(auto e:ans) Yes(e);
}
0