제출 #18461

#제출 시각아이디문제언어결과실행 시간메모리
18461tlwpdusBeads and wires (APIO14_beads)C++98
0 / 100
2 ms384 KiB
#include<stdio.h>
#include<algorithm>

#define MAXN 200010
#define MAXM 200010

using namespace std;

int n;
int nxt[MAXM*2], st[MAXN], en[MAXM*2], wei[MAXM*2];
int dyn[MAXN][2];

void dfs(int here, int p, int uew) {
	int i, cnt = 0, sum = 0, m1 = -2e9, m2 = -2e9;
	for (i=st[here];i!=-1;i=nxt[i]) {
		int there = en[i];
		if (there==p) continue;
		dfs(there,here,wei[i]);
		cnt++;
		sum += dyn[there][1];
		int val = dyn[there][0]-dyn[there][1]+wei[i];
		if (m1<val) {m2=m1;m1=val;}
		else if (m2<val) m2=val;
	}
	if (cnt<2) dyn[here][0] = sum;
	else dyn[here][0] = max(sum,sum+m1+m2);
	if (cnt<1) dyn[here][1] = dyn[here][0];
	else dyn[here][1] = max(dyn[here][0],sum+m1+uew);
}
void process() {
	dfs(0,-1,0);
	printf("%d\n",dyn[0][0]);
}

int ptr = 0;
void add_edge(int u, int v, int w) {
	nxt[ptr] = st[u];
	wei[ptr] = w;
	en[ptr] = v;
	st[u] = ptr++;
	nxt[ptr] = st[v];
	wei[ptr] = w;
	en[ptr] = u;
	st[v] = ptr++;
}
void input() {
	int i;
	scanf("%d",&n);
	for (i=0;i<n;i++) st[i] = -1;
	for (i=0;i<n-1;i++) {
		int a, b, w;
		scanf("%d %d %d",&a,&b,&w);
		add_edge(--a,--b,w);
	}
}

int main() {
	input();
	process();
	return 0;
}

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

beads.cpp: In function 'void input()':
beads.cpp:48:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
  ~~~~~^~~~~~~~~
beads.cpp:52:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d %d",&a,&b,&w);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...