제출 #356266

#제출 시각아이디문제언어결과실행 시간메모리
356266achibasadzishviliIslands (IOI08_islands)C++17
30 / 100
881 ms131072 KiB
#include<bits/stdc++.h> #define ll long long #define f first #define s second #define pb push_back #define mp make_pair #define N 1000002 using namespace std; int n,p[N],l[N],fix[N],F[N],k,c[N],len; long long mx[N],ans,pas; vector<pair<int,int> >v[N]; vector<int>g,all,dis; void dfs(int x){ if(F[x])return; all.pb(x); F[x] = 1; for(int i=0; i<v[x].size(); i++) dfs(v[x][i].f); } void findc(int x,int par){ if(fix[x]){ g.pb(x); dis.pb(l[par]); k = 1; return; } g.pb(x); fix[x] = 1; for(int i=0; i<v[x].size(); i++) if(v[x][i].s != par){ dis.pb(l[v[x][i].s]); findc(v[x][i].f , v[x][i].s); if(k)return; dis.pop_back(); } g.pop_back(); } void findmx(int x,int par){ for(int i=0; i<v[x].size(); i++){ if(v[x][i].s != par && !c[v[x][i].f]){ findmx(v[x][i].f , v[x][i].s); ans = max(ans , mx[x] + mx[v[x][i].f] + l[v[x][i].s]); mx[x] = max(mx[x] , mx[v[x][i].f] + l[v[x][i].s]); } } } main(){ ios::sync_with_stdio(false); cin >> n; for(int i=1; i<=n; i++){ cin >> p[i] >> l[i]; v[p[i]].pb(mp(i , i)); v[i].pb(mp(p[i] , i)); } ll cur,cur2,pre; for(int s=1; s<=n; s++){ if(F[s])continue; len = 0; ans = 0; k = 0; all.clear(); dfs(s); g.clear(); dis.clear(); findc(s , 0); vector<int>cyc,d; for(int i=0; i<g.size(); i++){ if(g[i] == g[(int)g.size() - 1]){ for(int j=i+1; j<g.size(); j++){ cyc.pb(g[j]); d.pb(dis[j - 1]); c[g[j]] = 1; } break; } } for(int i=0; i<cyc.size(); i++){ findmx(cyc[i] , 0); len += d[i]; } cur = mx[cyc[0]]; cur2 = mx[cyc[0]]; pre = 0; for(int i=1; i<cyc.size(); i++){ pre += d[i]; ans = max(ans , cur + mx[cyc[i]] + pre); ans = max(ans , cur2 + len + mx[cyc[i]] - pre); cur = max(cur , mx[cyc[i]] - pre); cur2 = max(cur2 , mx[cyc[i]] + pre); } pas += ans; } cout << pas << '\n'; }

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

islands.cpp: In function 'void dfs(int)':
islands.cpp:17:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |     for(int i=0; i<v[x].size(); i++)
      |                  ~^~~~~~~~~~~~
islands.cpp: In function 'void findc(int, int)':
islands.cpp:29:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     for(int i=0; i<v[x].size(); i++)
      |                  ~^~~~~~~~~~~~
islands.cpp: In function 'void findmx(int, int)':
islands.cpp:39:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |     for(int i=0; i<v[x].size(); i++){
      |                  ~^~~~~~~~~~~~
islands.cpp: At global scope:
islands.cpp:47:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   47 | main(){
      |      ^
islands.cpp: In function 'int main()':
islands.cpp:68:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |         for(int i=0; i<g.size(); i++){
      |                      ~^~~~~~~~~
islands.cpp:70:33: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |                 for(int j=i+1; j<g.size(); j++){
      |                                ~^~~~~~~~~
islands.cpp:78:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |         for(int i=0; i<cyc.size(); i++){
      |                      ~^~~~~~~~~~~
islands.cpp:85:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |         for(int i=1; i<cyc.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...
#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...