NC50772. B题
描述
输入描述
多组测试数据。
第一行给出数字n,代表顶点数量 (3 ≤ n ≤ 100)。
接下来n行给出路径。
每行给出三个数字ai, bi, ci (1 ≤ ai, bi ≤ n, ai ≠ bi, 1 ≤ ci ≤ 100) — 代表ai指向bi。代价是ci。
输出描述
输出最小代价
示例1
输入:
3 1 3 1 1 2 1 3 2 1 3 1 3 1 1 2 5 3 2 1 6 1 5 4 5 3 8 2 4 15 1 6 16 2 3 23 4 6 42
输出:
1 2 39
C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 492K, 提交时间: 2020-04-05 15:23:58
#include <bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; const int AX = 1e2 + 66 ; int n ; int a[AX][AX]; int res ; void dfs( int x , int pre , int num , int sum ){ if( num == n + 1 ){ res = min( res , sum ); return ; } for( int i = 1 ; i <= n ; i++ ){ if( a[x][i] >= 0 && i != pre ){ dfs( i , x , num + 1 , sum + a[x][i] ); } } } int main() { int x , y , w ; while( ~scanf("%d",&n) ){ memset( a , -1 , sizeof(a) ) ; res = INF ; for( int i = 0 ; i < n ; i++ ){ scanf("%d%d%d",&x,&y,&w); a[y][x] = w ; a[x][y] = 0 ; } dfs( 1 , -1 , 1 , 0 ); printf("%d\n",res); } return 0 ; }
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 376K, 提交时间: 2019-07-10 13:17:07
#include<bits/stdc++.h> using namespace std; struct node{ int v,cnt; }; const int MAXN=111; vector<node>g[MAXN]; int a,b,c,n,ans; void dfs(int x,int father,int sum) { if(x==1) {ans=min(ans,sum);return ;} for(int i=0;i<g[x].size();++i) { if(g[x][i].v==father) continue; dfs(g[x][i].v,x,sum+g[x][i].cnt); } } int main() { while(scanf("%d",&n)!=EOF) { memset(g,0,sizeof(g)); ans=0x3f3f3f3f; for(int i=0;i<n;++i) { scanf("%d %d %d",&a,&b,&c); g[a].push_back({b,0}); g[b].push_back({a,c}); } for(int i=0;i<g[1].size();++i) dfs(g[1][i].v,1,g[1][i].cnt); printf("%d\n",ans); } }