Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define mk make_pair
- #define debug(x) cerr << #x << " = " << x << endl;
- #define debugV(x,n) for(int i = 0;i < n;i++) cerr << x[i] << " "; cerr<<endl;
- #define rep(i,a,b) for(int i = (int)a;i < (int)b;i++)
- #define F first
- #define S second
- #define pb push_back
- typedef pair<int,int> ii;
- typedef long long int ll;
- const int INF = 0x3f3f3f3f;
- const double EPS = 1e-5;
- vector < pair<ll,int> > adj[10010];
- int n,m;
- ll dist[10010];
- ll dijkstra(){
- priority_queue <pair <ll,int> > pq;
- rep(i,0,n+2){
- dist[i] = INF;
- }
- dist[1]=0;
- pq.push(mk(-dist[1],1));
- while(!pq.empty()){
- int u = pq.top().S;
- pq.pop();
- if(u == n) return dist[u];
- rep(i,0,adj[u].size()){
- int v = adj[u][i].F;
- ll cost = adj[u][i].S+dist[u];
- if(dist[v] > cost){
- dist[v] = cost;
- pq.push(mk(-dist[v],v));
- }
- }
- }
- return dist[n];
- }
- int main(){
- int t,a,b,c;
- scanf("%d",&t);
- ll s=0;
- while(t--){
- scanf("%d%d",&n,&m);
- rep(i,0,m){
- scanf("%d%d%d",&a,&b,&c);
- adj[a].pb(mk(b,c));
- }
- s+=dijkstra();
- rep(i,0,n+2)adj[i].clear();
- }
- printf("%lld\n",s);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement