Https://www.nowcoder.com/acm/contest/67/E
Ideas:
Dfs
Code:
#include <bits/stdc++.h>using namespacestd;#definell Long Long#definePB Push_back#defineMP Make_pair#definePII pair<int,int>#defineMem (A, B) memset (A,b,sizeof (a))Const intn= the;Const intinf=0x3f3f3f3f;intCnt=0;intHead[n];intCost[n];intD[n];BOOLUsed[n];BOOLVis[n];structedge{intTo,w,next;} Edge[n];voidAdd_edge (intUintVintW) {edge[cnt].to=v; EDGE[CNT].W=W; Edge[cnt].next=Head[u]; Head[u]=cnt++;}intans=inf,c,k;voidDfsintu) {Vis[u]=true; if(u==c) { inttot=0; for(intI=1; i<=k;i++)if(Used[i]) tot+=Cost[i]; Ans=min (Ans,tot); }Else{ for(intI=head[u];~i;i=Edge[i].next) { if(!Vis[edge[i].to]) { BOOLt=USED[EDGE[I].W]; USED[EDGE[I].W]=true; Vis[edge[i].to]=true; DFS (EDGE[I].TO); Vis[edge[i].to]=false; USED[EDGE[I].W]=T; } } }}intMain () {Ios::sync_with_stdio (false); Cin.tie (0); intn,m,e,a,b,u,v; while(cin>>n>>m>>k>>c) {Mem (head,-1); Mem (Vis,false); MEM (Used,false); CNT=0; while(m--) {cin>>u>>v>>e; Add_edge (u,v,e); } for(intI=0; i<k;i++) {cin>>a>>b; Cost[a]=b; } ans=INF; DFS (1); cout<<ans<<Endl; } return 0; } /*6 7 5 3 (3 ) 2 5 (6) 4 6 to 1003 4222 2105 1074*/
2018 National multi-school algorithm winter training Camp Practice competition (first session) E Love and programmer