Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstdlib>
- #include <cmath>
- #include <vector>
- #include <queue>
- #include <cstdio>
- #include <cstring>
- #define stolica 1
- using namespace std;
- typedef pair< int, int > pii;
- const int MAX = 1000000;
- const int INF = 0x3f3f3f3f;
- vector< pii > G[MAX];
- int d[MAX];
- void dijkstra(int start)
- {
- int u, v, i, c, w;
- priority_queue< pii, vector< pii >, greater< pii > > Q;
- memset(d, 0x3f, sizeof d);
- Q.push(pii(0, start));
- d[start] = 0;
- while(!Q.empty()) {
- u = Q.top().second; // node
- c = Q.top().first; // node cost so far
- Q.pop(); // remove the top item.
- if(d[u] < c) continue;
- for(i = 0; i < G[u].size(); i++)
- {
- v = G[u][i].first; // node
- w = G[u][i].second; // edge weight
- if(d[v] > d[u] + w) {
- d[v] = d[u] + w;
- Q.push(pii(d[v], v));
- }
- }
- }
- }
- main()
- {
- int ilosc_miast = 0; // N
- int ilosc_traktow = 0; // M
- int ilosc_potencjalnych_traktow = 0; // K
- int *d_org = new int[MAX];
- ifstream dane;
- ofstream zapis("out.txt", ios::out);
- dane.open("in2.txt"); //------------------------- PLIK Z KTOREGO POBIERAMY DANE ----------------
- dane >> ilosc_miast;
- dane >> ilosc_traktow;
- dane >> ilosc_potencjalnych_traktow;
- int n, e;
- n=ilosc_miast;
- e=ilosc_traktow;
- int *u = new int[MAX];
- int *v = new int[MAX];
- int *w = new int[MAX];
- int u_d[1001];
- int v_d[1001];
- int w_d[1001];
- int ile = 0;
- for(int i=0; i<e; i++)
- {
- dane >> u[i];
- dane >> v[i];
- dane >> w[i];
- }
- for(int i=0; i<ilosc_potencjalnych_traktow; i++)
- {
- dane >> u_d[i];
- dane >> v_d[i];
- dane >> w_d[i];
- }
- for(int i = 0; i < e; i++)
- {
- G[u[i]].push_back(pii(v[i], w[i]));
- G[v[i]].push_back(pii(u[i], w[i]));
- }
- dijkstra(stolica);
- /*cout<<"Najkrotsze dlugosci drog od stolicy: \n";
- for(int i = 1; i <= n; i++) {
- if(i == stolica) continue;
- if(d[i] >= INF) cout<<"\t do miasta " << i <<" brak drogi\n";
- else cout<<"\t do miasta " << i <<" "<<d[i]<<endl;
- }*/
- for(int i = 1; i <= n; i++)
- {
- d_org[i]=d[i];
- }
- for(int i = 0; i < ilosc_potencjalnych_traktow; i++)
- {
- for(int i = 1; i <= n; i++) G[i].clear();
- for(int i = 0; i < e; i++)
- {
- G[u[i]].push_back(pii(v[i], w[i]));
- G[v[i]].push_back(pii(u[i], w[i]));
- }
- G[u_d[i]].push_back(pii(v_d[i], w_d[i]));
- G[v_d[i]].push_back(pii(u_d[i], w_d[i]));
- dijkstra(stolica);
- for(int i = 2; i <= n; i++)
- {
- if(d[i] >= INF);
- else if(d_org[i] > d[i]) ile++;
- }
- cout<<ile<<endl;
- zapis<<ile<<endl;
- ile = 0;
- }
- dane.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment