[UVA] 1218 - Perfect Service(동적 계획)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<list>
#include<string>
#include<sstream>
#include<ctime>
using namespace std;
#define _PI acos(-1.0)
#define INF 1 << 10
#define esp 1e-6
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> pill;
/*===========================================
===========================================*/
#define MAXD 10000 + 10
int n;
int dp[MAXD][4];
int vis[MAXD];
/*dp[i][0] i */
/*dp[i][1] i */
/*dp[i][2] i */
vector<int>G[MAXD];
void DP(int pos){
vis[pos] = 1;
dp[pos][0] = 1;
dp[pos][1] = 0;
dp[pos][2] = 1 << 20;
vector<int>arr;
for(int i = 0 ; i < G[pos].size() ; i++){
int t = G[pos][i];
if(!vis[t]){
DP(t);
arr.push_back(t);
dp[pos][0] = dp[pos][0] + min(dp[t][1],dp[t][0]);
dp[pos][1] += dp[t][2];
}
}
for(int i = 0 ; i < arr.size() ; i++){
int t = arr[i];
dp[pos][2] = min(dp[pos][2],dp[pos][1] - dp[t][2] + dp[t][0]);
}
return ;
}
int main(){
while(scanf("%d",&n)){
for(int i = 1 ; i <= n ; i++)
G[i].clear();
for(int i = 1 ; i < n ; i++){
int x,y;
scanf("%d%d",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
}
int ans = 1 << 20;
DP(1);
memset(vis,0,sizeof(vis));
ans = min(dp[1][0],dp[1][2]);
printf("%d
",ans);
int next;
scanf("%d",&next);
if(next < 0)
break;
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.