Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream in("tollroads.in");
- ofstream out("tollroads.out");
- const int Max=100005;
- vector < pair <int , int > >v[Max];
- int d[Max],n,m,q;
- vector < int >c[Max];
- void citire()
- {
- in>>n>>m>>q;
- for(int i=1;i<=m;i++)
- {
- int x,y,z; in>>x>>y>>z;
- v[x].push_back({y,z});
- v[y].push_back({x,z});
- }
- }
- int Dijkstra(int nodd,int dist)
- {
- c[0].push_back(nodd);
- for(int i=1;i<=n;i++)
- d[i]=dist+1;
- d[nodd]=0;
- for(int t=0;t<dist;t++)
- {
- for(int i=0;i<c[t].size();i++)
- if(d[c[t][i]]==t)
- {
- for(int j=0;j<v[c[t][i]].size();j++)
- {
- int vecin=v[c[t][i]][j].first;
- int cost=v[c[t][i]][j].second;
- if(d[vecin]>d[c[t][i]]+cost)
- {
- d[vecin]=d[c[t][i]]+cost;
- c[d[vecin]].push_back(vecin);
- }
- }
- }
- c[t].clear();
- }
- c[dist].clear();
- int nr=0;
- for(int i=1;i<=n;i++)
- if(i!=nodd && d[i]<=dist)
- nr++;
- return nr;
- }
- int main()
- {
- citire();
- for(int i=1;i<=q;i++)
- {
- int x,y; in>>x>>y;
- out<<Dijkstra(x,y)<<"\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement