제출 #970509

#제출 시각아이디문제언어결과실행 시간메모리
970509yellowtoadStranded Far From Home (BOI22_island)C++17
10 / 100
412 ms58864 KiB
#include <iostream> #include <vector> #include <algorithm> #define f first #define s second using namespace std; long long n, m, p[200010], sum[200010], vis[200010], scc[200010], cnt, in[200010]; pair<long long,int> a[200010]; vector<int> edge[200010], ed[200010], rev[200010], post; int dsu(int u) { if (u == p[u]) return u; return p[u] = dsu(p[u]); } void dfs(int u) { vis[u] = 1; for (int i = 0; i < ed[u].size(); i++) if (!vis[ed[u][i]]) dfs(ed[u][i]); post.push_back(u); } void rdfs(int u) { scc[u] = cnt; for (int i = 0; i < rev[u].size(); i++) if (!scc[rev[u][i]]) rdfs(rev[u][i]); } int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> a[i].f; a[i].s = p[i] = i; sum[i] = a[i].f; } sort(a+1,a+n+1); for (int i = 1; i <= m; i++) { int u, v; cin >> u >> v; edge[u].push_back(v); edge[v].push_back(u); } for (int i = 1; i <= n; i++) { int u = a[i].s; vis[u] = 1; for (int j = 0; j < edge[u].size(); j++) { if (!vis[edge[u][j]]) continue; ed[u].push_back(edge[u][j]); rev[edge[u][j]].push_back(u); if (dsu(u) != dsu(edge[u][j])) { if (sum[dsu(edge[u][j])] >= a[i].f) ed[edge[u][j]].push_back(u), rev[u].push_back(edge[u][j]);; sum[dsu(u)] += sum[dsu(edge[u][j])]; p[dsu(edge[u][j])] = p[dsu(u)]; } } } for (int i = 1; i <= n; i++) vis[i] = 0; for (int i = 1; i <= n; i++) if (!vis[i]) dfs(i); for (int i = post.size()-1; i >= 0; i--) { if (!scc[post[i]]) { ++cnt; rdfs(post[i]); } } for (int i = 1; i <= n; i++) for (int j = 0; j < ed[i].size(); j++) if (scc[i] != scc[ed[i][j]]) in[scc[ed[i][j]]]++; for (int i = 1; i <= n; i++) cout << (in[scc[i]] == 0); cout << endl; }

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

island.cpp: In function 'void dfs(int)':
island.cpp:19:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |  for (int i = 0; i < ed[u].size(); i++) if (!vis[ed[u][i]]) dfs(ed[u][i]);
      |                  ~~^~~~~~~~~~~~~~
island.cpp: In function 'void rdfs(int)':
island.cpp:25:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |  for (int i = 0; i < rev[u].size(); i++) if (!scc[rev[u][i]]) rdfs(rev[u][i]);
      |                  ~~^~~~~~~~~~~~~~~
island.cpp: In function 'int main()':
island.cpp:45:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |   for (int j = 0; j < edge[u].size(); j++) {
      |                   ~~^~~~~~~~~~~~~~~~
island.cpp:64:49: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |  for (int i = 1; i <= n; i++) for (int j = 0; j < ed[i].size(); j++) if (scc[i] != scc[ed[i][j]]) in[scc[ed[i][j]]]++;
      |                                               ~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...