제출 #42081

#제출 시각아이디문제언어결과실행 시간메모리
42081OneSubmissionMan구슬과 끈 (APIO14_beads)C++11
0 / 100
48 ms52472 KiB
# include <bits/stdc++.h>

# define F first
# define S second
# define mp make_pair
// everything go according to my plan
# define pb push_back
# define sz(a) (int)(a.size())
# define vec vector
// shimkenttin kyzdary, dzyn, dzyn, dzyn...
# define y1    Y_U_NO_y1
# define left  Y_U_NO_left
# define right Y_U_NO_right

using namespace std;

typedef pair <int, int> pii;
typedef long long ll;
typedef long double ld;

const int Mod = (int)1e9 + 7;
const int MX = 1073741822;
const ll MXLL = 4e18;
const int Sz = 1110111;
// a pinch of soul
inline void Read_rap () {
  ios_base :: sync_with_stdio(0);
  cin.tie(0); cout.tie(0);
}
inline void randomizer3000 () {
  unsigned int seed;
  asm ("rdtsc" : "=A"(seed));
  srand (seed);
}
void files (string problem) {
  if (fopen ((problem + ".in").c_str(),"r")) {
    freopen ((problem + ".in").c_str(),"r",stdin);
    freopen ((problem + ".out").c_str(),"w",stdout);
  }
}
void localInput (string in = "s") {
  if (fopen (in.c_str(), "r"))
    freopen (in.c_str(), "r", stdin);
  else {
    cerr << "Input file not found" << endl;
  }
}          
ll dp[Sz][4];

int n;

vec<int> g[Sz], w[Sz];

void dfs (int v, int pr) {
  for (int to : g[v]) {
    if (to != pr) 
      dfs (to, v);
  }      
  dp[v][0] = 0;
  dp[v][1] = -MX;
  dp[v][2] = -MX;
  for (int to : g[v]) {
    if (to != pr) { 
      dp[v][0] += dp[to][3];
    }
  }     
  ll up = -MX;    
  for (int i = 0; i < sz(g[v]); i++) {
    int to = g[v][i];
    if (to == pr) {
      up = w[v][i];
      break;
    }
  }   
  for (int i = 0; i < sz(g[v]); i++) {
    int to = g[v][i];
    int len = w[v][i];
    if (to != pr) { 
      dp[v][1] = max (dp[v][1], up + max (dp[to][0], dp[to][2]) - dp[to][3] + len + dp[v][0]);
    }
  }
  ll mx[3];
  mx[0] = mx[2] = -MX;
  for (int i = 0; i < sz(g[v]); i++) {
    int to = g[v][i];
    int len = w[v][i];      
    if (to != pr) {
      dp[v][2] = max (dp[v][2], max (dp[to][0] + max (mx[0], mx[2]), dp[to][2] + mx[0]) + len - dp[to][3] + dp[v][0]);
      mx[0] = max (mx[0], dp[to][0] + len - dp[to][3]);
      mx[2] = max (mx[2], dp[to][2] + len - dp[to][3]);
    }
  }
  for (int i = 0; i < 3; i++)
    dp[v][3] = max (dp[v][i], dp[v][3]); 
}       
int main()
{
  Read_rap();
  localInput();
  cin >> n;        
  for (int i = 1; i < n; i++) {
    int x, y, z; cin >> x >> y >> z;
    g[x].pb (y);
    w[x].pb (z);
    g[y].pb (x);
    w[y].pb (z);
  }
  dfs (1, 1);
  ll mx = 0;     
  for (int i = 0; i < 3; i++) {  
    if (i == 1)
      continue;
    mx = max (mx, dp[1][i]);
  }
  cout << mx;

  return 0;
}










// Coded by Z..

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

beads.cpp: In function 'void files(std::__cxx11::string)':
beads.cpp:37:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
     freopen ((problem + ".in").c_str(),"r",stdin);
     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
beads.cpp:38:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
     freopen ((problem + ".out").c_str(),"w",stdout);
     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
beads.cpp: In function 'void localInput(std::__cxx11::string)':
beads.cpp:43:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
     freopen (in.c_str(), "r", stdin);
     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...