結果

問題 No.2910 単体ホモロジー入門
ユーザー 👑 p-adic
提出日時 2023-09-08 15:42:51
言語 C++17(gcc12)
(gcc 12.3.0 + boost 1.87.0)
結果
AC  
実行時間 72 ms / 2,000 ms
コード長 1,647 bytes
コンパイル時間 1,941 ms
コンパイル使用メモリ 198,988 KB
最終ジャッジ日時 2025-02-16 19:25:21
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 47
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

int main()
{
  int N; cin >> N;
  int M; cin >> M;
  constexpr int bound_M = 6;
  int ij[bound_M][2];
  for( int m = 0 ; m < M ; m++ ){
    cin >> ij[m][0] >> ij[m][1];
  }
  set<int> vertex_exception{};
  for( int i = 0 ; i < 3 ; i++ ){
    int v; cin >> v;
    vertex_exception.insert( v );
  }
  for( int m0 = 0 ; m0 < M ; m0++ ){
    for( int m1 = 0 ; m1 < M ; m1++ ){
      if( m0 == m1 ){
	continue;
      }
      int count1 = 0;
      int start0;
      int end0;
      int end1;
      for( int s = 0 ; s < 2 ; s++ ){
	for( int t = 0 ; t < 2 ; t++ ){
	  if( ij[m0][s] == ij[m1][t] ){
	    count1++;
	    start0 = ij[m0][1-s];
	    end0 = ij[m0][s];
	    end1 = ij[m1][1-t];
	  }
	}
      }
      if( count1 != 1 ){
	continue;
      }
      for( int m2 = 0 ; m2 < M ; m2++ ){
	if( m0 == m2 || m1 == m2 ){
	  continue;
	}
	int count2 = 0;
	int end2;
	for( int t = 0 ; t < 2 ; t++ ){
	  if( end1 == ij[m2][t] ){
	    count2++;
	    end2 = ij[m2][1-t];
	  }
	}
	if( count2 != 1 ){
	  continue;
	}
	if( end2 == start0 ){
	  set<int> vertex{ end0 , end1 , end2 };
	  if( vertex != vertex_exception ){
	    cout << "Yes\n";
	    return 0;
	  }
	  continue;
	}
	for( int m3 = 0 ; m3 < M ; m3++ ){
	  if( m0 == m3 || m1 == m3 || m2 == m3 ){
	    continue;
	  }
	  int count3 = 0;
	  int end3;
	  for( int t = 0 ; t < 2 ; t++ ){
	    if( end2 == ij[m3][t] ){
	      count3++;
	      end3 = ij[m3][1-t];
	    }
	  }
	  if( count3 != 1 ){
	    continue;
	  }
	  if( end3 != start0 || end3 == end0 ){
	    continue;
	  }
	  cout << "Yes\n";
	  return 0;
	}
      }
    }
  }
  cout << "No\n";
  return 0;
}
0