voidsolve(){ int n;cin>>n; if(n == 1){ cout<<1<<"\n"; return; } memset(ind,0,sizeof(ind)); for(int i = 1 ; i <= n-1 ; i ++){ int x;cin>>x; ind[x]++; ind[i+1]++; } int ans = 0; for(int i = 1 ; i <= n ; i ++){ if(ind[i] == 1){ ans++; } } cout<<ans-1<<"\n"; }
intmain(void){ cin>>n>>m; for(int i = 1 ; i <= n ; i ++){ pre[i] = i; cin>>tim[i]; } for(int i = 1 ; i <= m ; i ++){ ll a,b; cin>>a>>b; join(a,b); } for(int i = 1 ; i <= n ; i ++){ if(pre[i] == i){ ans += tim[i]; } } cout<<ans; return0; }
voidsolve(){ int n;cin>>n; int min_ = INT_MAX; int ans = n; for(int i = 1 ; i <= n ; i ++){ int x;cin>>x; if(x < min_){ min_ = x; ans --; } } cout<<ans<<endl; }
voiddijkstra(){ // 1 for(int i = 1 ; i <= n ; i ++){ d1[i] = inf; } d1[1] = 0; pq1.push({d1[1],1}); while(!pq1.empty()){ int f = pq1.top().second; pq1.pop(); if(vis1[f]) continue; vis1[f] = true; for(int j = head[f] ; j != -1 ; j = e[j].nex){ int to = e[j].to; if(!vis1[to] && d1[to] > d1[f] + e[j].w){ d1[to] = d1[f] + e[j].w; pq1.push({d1[to], to}); } } } // 2 for(int i = 1 ; i <= n ; i ++){ d2[i] = inf; } d2[n] = 0; pq2.push({d2[n],n}); while(!pq2.empty()){ int f = pq2.top().second; pq2.pop(); if(vis2[f]) continue; vis2[f] = true; for(int j = head[f] ; j != -1 ; j = e[j].nex){ int to = e[j].to; if(!vis2[to] && d2[to] > d2[f] + e[j].w){ d2[to] = d2[f] + e[j].w; pq2.push({d2[to], to}); } } } }
intmain(void){ cin>>n>>m>>a>>b; memset(head,-1,sizeof(head)); for(int i = 1 ; i <= m ; i ++){ int x,y,w; cin>>x>>y>>w; add_edge(x,y,w); add_edge(y,x,w); } dijkstra(); ll ans = inf; for(int i = 1 ; i <= n ; i ++){ if(d1[i] <= a && d2[i] <= b){ ans = min(ans, d1[i] + d2[i]); } } if(ans == inf){ cout<<"(T_T)"; }else{ cout<<ans; } return0; }