제출 #712525

#제출 시각아이디문제언어결과실행 시간메모리
712525yuseok0803Museum (CEOI17_museum)C++14
100 / 100
473 ms746232 KiB
#include <stdio.h> #include <vector> #include <queue> #include <set> #include <map> #include <algorithm> #include <stdlib.h> #include <string.h> #include <math.h> #include <stack> #include <ctype.h> #define p(x,y) pair<x, y> #define pii pair<int, int> #define v(x) vector<x> #define q(x) queue<x> #define pq(x) priority_queue<x> #define uppq(x, comp) priority_queue<x, vector<x>, comp> #define st(x) set<x> #define m(x, y) map<x, y> #define fi(s,e) for(int i=s;i<e;i++) #define fj(s,e) for(int j=s;j<e;j++) #define fk(s,e) for(int k=s;k<e;k++) typedef long long int ll; typedef unsigned long long int ull; typedef __int128 ulll; using namespace std; int n,need,x; v(pii) pushvec; v(v(pii)) vec; int cnt[100010]; int dp[10010][10010][2]; //dp[start][visited rooms cnt][start==end?] void find(int now, int parent){ dp[now][1][0]=0; dp[now][1][1]=0; fi(2, need+1) dp[now][i][0] = dp[now][i][1] = 999999999; cnt[now]=1; int sz = vec[now].size(); fi(0,sz){ pii next = vec[now][i]; if(next.first == parent) continue; find(next.first, now); for(int j = cnt[now]; j >= 1; j--){ fk(1, cnt[next.first]+1){ if(j + k > need) break; dp[now][j+k][1] = min(dp[now][j+k][1], dp[now][j][1]+dp[next.first][k][1]+next.second*2); dp[now][j+k][0] = min({dp[now][j+k][0], dp[next.first][k][1]+dp[now][j][0]+next.second*2, dp[now][j][1]+next.second+dp[next.first][k][0]}); } } cnt[now] += cnt[next.first]; } return; } int main(void){ scanf("%d%d%d",&n,&need,&x); fi(0,n+1) vec.push_back(pushvec); fi(1,n){ int a,b,c; scanf("%d%d%d",&a,&b,&c); vec[a].push_back({b,c}); vec[b].push_back({a,c}); } find(x, x); printf("%d\n", dp[x][need][0]); return 0; }

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

museum.cpp: In function 'int main()':
museum.cpp:65:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   65 |  scanf("%d%d%d",&n,&need,&x);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~~
museum.cpp:70:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   70 |   scanf("%d%d%d",&a,&b,&c);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...