結果

問題 No.3482 Quod Erat Demonstrandum
コンテスト
ユーザー tnakao0123
提出日時 2026-04-02 17:05:54
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 106 ms / 2,000 ms
コード長 1,371 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 469 ms
コンパイル使用メモリ 78,936 KB
実行使用メモリ 95,532 KB
最終ジャッジ日時 2026-04-02 17:06:18
合計ジャッジ時間 7,850 ms
ジャッジサーバーID
(参考情報)
judge1_1 / judge4_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 45
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

/* -*- coding: utf-8 -*-
 *
 * 3482.cc:  No.3482 Quod Erat Demonstrandum - yukicoder
 */

#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>
#include<utility>

using namespace std;

/* constant */

const int MAX_N = 200000;
const int MAX_N2 = MAX_N * 2;

/* typedef */

using qi = queue<int>;
using pii = pair<int,int>;
using vpii = vector<pii>;

/* global variables */

vpii nbrs[MAX_N];
int ds[MAX_N2];

/* subroutines */

/* main */

int main() {
  int tn;
  scanf("%d", &tn);

  while (tn--) {
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i++) nbrs[i].clear();
    for (int i = 0; i < m; i++) {
      int u, v, w;
      scanf("%d%d%d", &u, &v, &w);
      u--, v--, w--;
      nbrs[u].push_back({v, w});
      nbrs[v].push_back({u, w});
    }

    int n2 = n * 2;
    fill(ds, ds + n2, -1);
    ds[0] = 0;
    qi q;
    q.push(0);

    while (! q.empty()) {
      int u = q.front(); q.pop();

      int up = (u >> 1), uq = (u & 1);
      for (auto [vp, w]: nbrs[up]) {
	if (w == 0 || uq == 0) {
	  int v = (vp << 1) | (uq | w);
	  if (ds[v] < 0)
	    ds[v] = ds[u] + 1, q.push(v);
	}
      }
    }

    int gl0 = ((n - 1) << 1), gl1 = (gl0 | 1);
    if (ds[gl0] >= 0)
      printf("Same\n%d\n", ds[gl0]);
    else if (ds[gl1] >= 0)
      printf("Different\n%d\n", ds[gl1]);
    else
      puts("Unknown");
  }

  return 0;
}

0