제출 #846155

#제출 시각아이디문제언어결과실행 시간메모리
846155vjudge1KOVANICE (COI15_kovanice)C++17
0 / 100
364 ms27092 KiB
#include <bits/stdc++.h> using namespace std; #define fast ios::sync_with_stdio(0);cin.tie(0); #define s second #define f first typedef long long ll; const ll MOD = 998244353; const ll LOGN = 20; const ll MAXN = 3e5 + 5; vector<vector<int>> graph, inv; int par[MAXN], sz[MAXN], indeg[MAXN]; int dist[MAXN]; int find(int node) { if (node == par[node]) return node; return par[node] = find(par[node]); } void unite(int a, int b) { a = find(a); b = find(b); if (a == b) return ; if (sz[b] > sz[a]) swap(a, b); par[b] = a; sz[a] += sz[b]; } vector<int> type; void dfs(int node, int req) { node = find(node); if (type[node] != -1 || dist[node] + 1 != req || req == 0) return ; type[node] = req; for (auto u : inv[node]) { dfs(u, req - 1); } } vector<pair<int,int>> edge; int main() { fast int N, M, V; cin >> N >> M >> V; graph = vector<vector<int>>(M+1, vector<int>()); inv = vector<vector<int>>(M+1, vector<int>()); type = vector<int>(M+1, -1); for (int i = 1; i <= M; i++) par[i] = i, sz[i] = 1; for (int i = 0; i < V; i++) { string s; cin >> s; int l = s[0] - '0'; int r = s[2] - '0'; if (s[1] == '=') unite(l, r); else edge.push_back({l, r}); } for (int i = 0; i < edge.size(); i++) { edge[i] = {find(edge[i].f), find(edge[i].s)}; graph[edge[i].f].push_back(edge[i].s); inv[edge[i].s].push_back(edge[i].f); indeg[edge[i].s]++; } queue<int> q; for (int i = 1; i <= M; i++) { if (i == find(i) && indeg[i] == 0) q.push(i); } while (!q.empty()) { int node = q.front(); q.pop(); node = find(node); for (auto u : graph[node]) { int p = find(u); if (dist[node] + 1 > dist[p]) { dist[p] = dist[node] + 1; q.push(p); } } } for (int i = 1; i <= M; i++) { if (dist[i] + 1 == N) dfs(i, N); } for (int i = 1; i <= M; i++) { if (type[find(i)] == -1) cout << "?" << endl; else cout << "K" << type[find(i)] << endl; } }

컴파일 시 표준 에러 (stderr) 메시지

kovanice.cpp: In function 'int main()':
kovanice.cpp:67:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |  for (int i = 0; i < edge.size(); i++) {
      |                  ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...