hdu1878オイラー互いに素セット

問題の説明

オイラー紙オフペンをしない指し、一度だけ図に各エッジを塗装することができ、ループの開始点に戻ることができます。オイラーがあれば今、マップ与えられた、頼みますか?

 
入力
テスト入力には、いくつかのテストケースが含まれています。各テストケースは、最初の2つの正の整数の列が与えられ、ノードN(1 <N <1000)の数とエッジMの数であり、Mは、その後縁に対応するM個の行は、各列は、正の整数の組が与えられ、どの2つのノードは、ストリップのエッジ(1からNまでのノード番号)と直接通信していません。Nは0入力接合である場合
、ビームは。
 
出力
ライン当たり各テストケースの出力は、オイラー出力1、出力0は、そうでなければ存在する場合。
 
サンプル入力
3 3
1 2
1 3
2 3
3 2
1 2
2 3
0
サンプル出力
1
0
 
 
オイラー:いいえ図の決意状態に--- >>すべての点について、図通信が偶数であります 
      すべてのポイント0 +1、-1度、のうち、図の接続グラフ--- >>に存在決意条件
 
オイラー経路:なし決意状態図の接続グラフを--- >>すべての点について①は偶数であります  
                    ②ポイントの残りは偶数であり、そして2つだけの奇数度点(開始点、終了点)
      全ての点0のため、図の接続グラフ--- >>①+1のうち、-1度を指向分析条件
                    ②のみ2点の0ではない、1、-1
上記の条件が必要な大規模な条件、図のグラフのコミュニケーションを!
だから、決定することによって、この問題互いに素セットと通信するかどうか
 
 
#include <ビット/ STDC ++ H> 
名前空間STDを使用して、
const int型MAXN = 1E3 + 5。
int型D [MAXN]。
名前空間stdを使用。
int型のパー[MAXN]。
int型NUM [MAXN]。
()INITを無効
{ 
    (私は++; iがMAXNを<I = 0をINT)するための
        [I] = I、NUM PAR [I] = 1。
} 
 
INT(INT X)を見つける
{ 
    (!パー[X] = x)の場合は
        額面[X] =(PARは、[X])を見つけます。
    パーを返す[X]; 
} 
 
ボイド連合(int型のx、int型のY)
{ 
    int型XX =検索(X)
    YY = INT(y)を見つけます。
    IF(!= XX YY){ 
        パー[XX] = YY。
        NUM [YY] + = NUM [XX]。
    } 
} 
int型のmain(){ 
	int型N、M。 
	IOS :: sync_with_stdio(偽)。
	一方、(1){ 
		CIN >> N。
		IF(N == 0)戻り0; 
		cinを>>メートル。
		その中に(); 
		memsetの(D、0、はsizeof(d)参照)。
		以下のために(; iがm <; I = 0 int型私は++は){ 
			int型、B。
			CIN >> A >> B; 
			連合(a、b)は、
			D [A] ++; 
			D [B] ++; 
		} 
		BOOL F = 1、G = 0。
		以下のために(INT i = 1; iは= N <; iは++){ 
			IF(D [i]は%2 == 1)F = 0。//存在奇数点
			IF(NUM [I] == n)をG = 1。//表示连通
		} 
		もしCOUT(&& G F)<< "1" << ENDL。
		他の裁判所未満<< "0" <<てendl; 
	} 

	0を返します。
}

  

 
 

 

おすすめ

転載: www.cnblogs.com/lyj1/p/11371586.html