1176 Hyperchannels
制限時間:1.0秒メモリーの上限:64メガバイト
銀河帝国は、N個の惑星で構成されています。Hyperchannelsは、惑星のほとんどの間に存在します。新皇帝は彼が複数のチャネルを使用していない他にどんな惑星から移動することができるような方法でhyperchannelsネットワークを拡張するために促しました。一つは、一方向にのみチャネルを通過することができます。
最後のチャネル確立船はこの船が、それは常に新しいものを確立し、既存のチャネルを通過することができない惑星Aの近くにベースの上に位置しています。しかし、一つの方向に同じ惑星を結ぶ2つのチャネルの存在はほとんど不可能、ナビゲーションはあまりにも困難にしています。問題はなし、過剰なものと、必要なすべてのチャネルを確立するために、この船のルートを見つけることです。このルート船の最後にベースに戻らなければなりません。
入力
最初の行は、整数含ま N ≤1000と惑星の数 A( ≤の N塩基が配置されています)。以下の各 N個の行が含まれている Nの番号を j個の目の数 I番目の行は、惑星からのチャネルが存在する場合は1に等しく 、I惑星に Jを、そうでなければ0に等しいです。帝国がこれ以上32000以上新しいものを確立することによりhyperchannels、そのニーズを満たすことができることを、知られています。
出力
出力チャネルが確立されるべき順序を含める必要があります。チャネルの送信元と送信先の惑星の数 - 各行には2つの整数を含まなければなりません。あなたは解決策が常に存在することを、仮定してもよいです。
サンプル
入力 | 出力 |
---|---|
4 2 0 0 1 0 0 0 1 0 1 1 0 1 0 0 1 0 |
2 4 4 1 1 2 2 1 1 4 4 2 |
問題著者:
パベルAtnashev
問題出典:
サードUSU個人的なプログラミングコンテスト、エカテリンブルグ、ロシア、2002年2月16日
************************************************** *************************************
深いとオイラー路を記録するためのハンティング(注意:ベクトルボイド逆を()、ベクトルの実際の容量が追加する必要がありますする、簡単に再計算されます。<アルゴリズム>前処理!!!!!!!!!!!!!!!! !!!!)
************************************************** *************************************
1の#include <iostreamの> 2の#include < ストリング > 3の#include <CStringの> 4の#include <cmath> 5の#include <cstdioを> 6の#include <ベクトル> 7の#include <キュー> 8の#include <アルゴリズム> 9 使用 名前空間はstd; 10ベクター< INT > ADJ [ 10001 ]。 11ベクター< INT > パス; 12 int型N、M、I、J、K。 13の 無効 DFS(int型秒)// 深搜求欧拉回路 14 { 15 ながら(ADJ [S] .size()) 16 { 17 のint p = ADJ [S] .back()。 18 ADJ [S] .pop_back()。 19の DFS(P)。 20 21 } 22 path.push_back(S); // 压入路径 23 } 24 のint main()の 25 { 26 CIN >> N >> M。 27 のためには、(i = 1 ; I ++; iが= N < ) 28 用(J = 1 ; J <= N; J ++ ) 29 { 30 cinを>> K; 31 場合(I = J && K ==!0 ) 32 ADJ [I] .push_back(J)。 33 } 34の DFS(M)。 35 逆(path.begin()、path.end())。 36 のために(i = 0 ; iは<path.size() - 1 ; iは++ ) 37 COUT <<パス[I] << ' ' <<パス[iが+ 1 ] << ENDL。 38 COUT << ENDL。 39 リターン 0 ; 40 }
ます。https://www.cnblogs.com/sdau--codeants/p/3260094.htmlで再現