結果
| 問題 | No.3508 OR Mapping |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-04-19 15:34:28 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,063 bytes |
| 記録 | |
| コンパイル時間 | 3,480 ms |
| コンパイル使用メモリ | 344,872 KB |
| 実行使用メモリ | 44,672 KB |
| 最終ジャッジ日時 | 2026-04-19 15:34:50 |
| 合計ジャッジ時間 | 18,373 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge3_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 49 WA * 16 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m, k;
cin >> n >> m >> k;
if (k == 0) {
cout << "Yes" << endl;
return 0;
}
struct Edge {
int u, v;
};
vector<Edge> edges(m);
vector<vector<int>> X(n + 1);
for (int i = 0; i < m; ++i) {
cin >> edges[i].u >> edges[i].v;
X[edges[i].u].push_back(edges[i].v);
}
vector<long long> dist(n + 1, -1);
queue<int> q;
dist[1] = 0;
q.push(1);
while (!q.empty()) {
int u = q.front();
q.pop();
for (int v : X[u]) {
if (dist[v] == -1) {
dist[v] = dist[u] + 1;
q.push(v);
}
}
}
for (int i = 1; i <= n; ++i) {
if (dist[i] == -1) {
cout << "No" << endl;
return 0;
}
}
vector<long long> g(n + 1, 0);
for (const auto& edge : edges) {
long long diff = abs(dist[edge.v] - (dist[edge.u] + 1));
if (diff > 0) {
g[edge.v] = gcd(g[edge.v], diff);
}
}
q.push(1);
// vector<bool> ok(n + 1, false);
for(int i=1; i<=n; i++) q.push(i);
while (!q.empty()) {
int u = q.front();
q.pop();
for (int v : X[u]) {
long long nxt = gcd(g[v], g[u]);
if (nxt != g[v]) {
g[v] = nxt;
q.push(v);
}
}
}
for (int i = 1; i <= n; ++i) {
for (int b = 0; b < k; ++b) {
long long mod = 1LL << (b + 1);
long long tar = 1LL << b;
long long P = gcd(g[i], mod);
bool ok = false;
if ((dist[i] % mod) >= tar) {
ok = true;
} else if (P > 0 && P <= tar) {
ok = true;
}
if (!ok) {
cout << "No" << endl;
return 0;
}
}
}
cout << "Yes" << endl;
return 0;
}