제출 #58266

#제출 시각아이디문제언어결과실행 시간메모리
58266memikakizakiTeleporters (IOI08_teleporters)C++14
70 / 100
765 ms66560 KiB
#include <bits/stdc++.h> #define long long long using namespace std; const int N = 1e6+3, INF = 1e9; int n, m, lf[N], rg[N], vals[2*N], rev[2*N], nxt[2*N]; vector<int> cycles; bitset<N<<1> mark; long ans; int main() { scanf("%d %d", &n, &m); for(int i = 0; i < n; i++) { scanf("%d %d", &lf[i], &rg[i]); vals[i<<1] = lf[i]; vals[i<<1|1] = rg[i]; } vals[2*n] = -1; sort(vals, vals+2*n+1); for(int i = 0; i <= n << 1; i++) rev[vals[i]] = i; for(int i = 0; i < n; i++) { nxt[rev[lf[i]]-1] = rev[rg[i]]; nxt[rev[rg[i]]-1] = rev[lf[i]]; } nxt[2*n] = INF; cycles.reserve(n); for(int i = 0; i <= n << 1; i++) if(!mark[i]) { int curr = i, sz = 0; bool cycle = false; while(curr != INF) { if(mark[curr]) { cycle = true; break; } ++sz; mark[curr] = true; curr = nxt[curr]; } if(cycle) cycles.push_back(sz); else ans = sz-1; } sort(cycles.begin(), cycles.end(), greater<int>()); for(int i = 0; i < min((int) cycles.size(), m); i++) ans += cycles[i] + 2; if(m > cycles.size()) { m -= cycles.size(); ans += (m - (m & 1)) << 1 + (m & 1); } printf("%lld", ans); }

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

teleporters.cpp: In function 'int main()':
teleporters.cpp:43:7: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(m > cycles.size()) {
     ~~^~~~~~~~~~~~~~~
teleporters.cpp:45:29: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   ans += (m - (m & 1)) << 1 + (m & 1);
                           ~~^~~~~~~~~
teleporters.cpp:11:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &m);
  ~~~~~^~~~~~~~~~~~~~~~~
teleporters.cpp:13:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &lf[i], &rg[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...
#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...
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...