#include #include using namespace std; class City; City ** g_mesta; int g_pocet; int* g_vysledky; class City { private: int * vzdalenosti; int index; public: City(int pocet_sousedu, int i) { index = i; vzdalenosti=(int *)malloc(pocet_sousedu*(sizeof(*vzdalenosti))); for(int i=0; i 0){ g_vysledky[index] = 0; for(int i = 0; i < g_pocet; i++){ if(vzdalenosti[i] > -1){ g_mesta[i]->vymaz((n - vzdalenosti[i])); } } } } }; int main(int argc, char* argv[]){ int bvzdalenost, cesty, baze; while(1){ scanf("%d%d%d%d", &g_pocet, &cesty, &baze, &bvzdalenost); if(!g_pocet && !bvzdalenost && !cesty && !baze) break; if(baze == 0){ printf("%d\n\n", g_pocet); continue; } g_vysledky = (int*)malloc(g_pocet * sizeof(*g_vysledky)); g_mesta = new City * [g_pocet]; for(int i=0; i < g_pocet; i++) { g_mesta[i] = new City(g_pocet, i); g_vysledky[i] = 1; } for(int i = 0; i < cesty; i++){ int m1, m2, l; scanf("%d%d%d", &m1, &m2, &l); g_mesta[(m1-1)] -> pridejCestu((m2-1), l); g_mesta[(m2-1)] -> pridejCestu((m1-1), l); } for(int i = 0; i < baze; i++){ int pos; scanf("%d", &pos); g_mesta[(pos-1)] -> vymaz(bvzdalenost); int cnt = 0; for(int i = 0; i < g_pocet; i++){ if(g_vysledky[i] == 1){ cnt++; } } printf("%d\n", cnt); } printf("\n"); for(int i = 0; i < g_pocet; i++){ delete g_mesta[i]; } delete[] g_mesta; free(g_vysledky); } return 0; }