Submission #94920

#TimeUsernameProblemLanguageResultExecution timeMemory
94920Retro3014Training (IOI07_training)C++17
30 / 100
4 ms712 KiB
#include <iostream> #include <algorithm> #include <vector> #include <stdio.h> #define MAX_N 1000 using namespace std; int N, M; struct S{ int idx, data; }; struct E{ int x, y, z; }; vector<E> e; vector<int> gp[MAX_N+1]; vector<S> gp2[MAX_N+1]; int p[MAX_N+1][15]; int c[MAX_N+1]; int lv[MAX_N+1]; int ans; int dp[MAX_N+1]; void dfs(int x){ for(int i=1; i<15; i++){ p[x][i] = p[p[x][i-1]][i-1]; } for(int i=0; i<gp[x].size(); i++){ if(c[gp[x][i]]==0){ c[gp[x][i]] = 3 - c[x]; p[gp[x][i]][0] = x; lv[gp[x][i]] = lv[x] + 1; dfs(gp[x][i]); } } } int up(int x, int y){ int two = (1<<14); for(int i=14; i>=0; i--){ if(y>=two){ x = p[x][i]; y-=two; } two/=2; } return x; } int lca(int x, int y){ } void dfs2(int x){ dp[x] = 0; for(int i=0; i<gp[x].size(); i++){ if(gp[x][i]!=p[x][0]){ dfs2(gp[x][i]); dp[x]+=dp[gp[x][i]]; } } for(int i=0; i<gp2[x].size(); i++){ int k = 0, pp; pp = up(gp2[x][i].idx, lv[gp2[x][i].idx]-lv[x]-1); for(int j=0; j<gp[x].size(); j++){ if(gp[x][j]!=p[x][0] && gp[x][j]!=pp){ k+=dp[gp[x][j]]; } } k+=gp2[x][i].data + dp[gp2[x][i].idx]; dp[x] = max(dp[x], k); } return; } int degree[MAX_N+1]; int main(){ scanf("%d%d", &N, &M); for(int i=0; i<M; i++){ int a, b, c; scanf("%d%d%d", &a, &b, &c); if(c==0){ degree[a]++; degree[b]++; gp[a].push_back(b); gp[b].push_back(a); }else{ e.push_back({a, b, c}); ans+=c; } } int now; for(int i=1; i<=N; i++){ if(degree[i]==1){ now = i; break; } } c[now] = 1; lv[now] = 1; dfs(now); for(int i=0; i<e.size(); i++){ if(c[e[i].x]==c[e[i].y]){ if(lv[e[i].x] > lv[e[i].y]){ int tmp = e[i].x; e[i].x = e[i].y; e[i].y = tmp; } gp2[e[i].x].push_back({e[i].y, e[i].z}); } } dfs2(now); ans-=dp[now]; printf("%d", ans); return 0; }

Compilation message (stderr)

training.cpp: In function 'void dfs(int)':
training.cpp:33:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<gp[x].size(); i++){
               ~^~~~~~~~~~~~~
training.cpp: In function 'int lca(int, int)':
training.cpp:57:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
training.cpp: In function 'void dfs2(int)':
training.cpp:61:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<gp[x].size(); i++){
               ~^~~~~~~~~~~~~
training.cpp:67:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<gp2[x].size(); i++){
               ~^~~~~~~~~~~~~~
training.cpp:70:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j=0; j<gp[x].size(); j++){
                ~^~~~~~~~~~~~~
training.cpp: In function 'int main()':
training.cpp:106:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<e.size(); i++){
               ~^~~~~~~~~
training.cpp:84:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &N, &M);
  ~~~~~^~~~~~~~~~~~~~~~
training.cpp:88:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d%d", &a, &b, &c);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~
training.cpp:115:13: warning: 'now' may be used uninitialized in this function [-Wmaybe-uninitialized]
  ans-=dp[now];
       ~~~~~~^
#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...