結果
| 問題 | No.3508 OR Mapping |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-04-19 00:04:53 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,618 bytes |
| 記録 | |
| コンパイル時間 | 3,680 ms |
| コンパイル使用メモリ | 346,816 KB |
| 実行使用メモリ | 116,104 KB |
| 最終ジャッジ日時 | 2026-04-19 00:05:21 |
| 合計ジャッジ時間 | 18,603 ms |
|
ジャッジサーバーID (参考情報) |
judge1_1 / judge3_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 46 WA * 19 |
ソースコード
#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;
vector<vector<int>> g(N), gr(N);
vector<pair<int,int>> edges;
for(int i=0;i<M;i++){
int u,v; cin >> u >> v; --u; --v;
g[u].push_back(v);
gr[v].push_back(u);
edges.emplace_back(u,v);
}
vector<char> vis(N,false);
stack<int> st;
st.push(0);
vis[0]=true;
while(!st.empty()){
int u=st.top(); st.pop();
for(int v: g[u]) if(!vis[v]){
vis[v]=true; st.push(v);
}
}
for(int i=0;i<N;i++){
if(!vis[i]){
cout << "No" << endl;
return 0;
}
}
vector<char> ok(N,false);
vector<int> X;
function<void(int)> dfs1 = [&](int u){
ok[u]=true;
for(int v: g[u]) if(!ok[v]) dfs1(v);
X.push_back(u);
};
for(int i=0;i<N;i++) if(!ok[i]) dfs1(i);
vector<int> comp(N,-1);
int val=0;
function<void(int)> dfs2 = [&](int u){
comp[u]=val;
for(int v: gr[u]) if(comp[v]==-1) dfs2(v);
};
for(int i=N-1;i>=0;i--){
int v = X[i];
if(comp[v]==-1){
dfs2(v);
val++;
}
}
vector<int> sz(val,0);
vector<char> loop(val,false);
for(int i=0;i<N;i++) sz[comp[i]]++;
for(auto &e: edges){
if(e.first==e.second) loop[comp[e.first]] = true;
}
int fir = comp[0];
if(sz[fir]==1 && !loop[fir]){
cout << "No" << endl;
return 0;
}
cout << "Yes" << endl;
return 0;
}