Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstdio>
- #include<deque>
- #include<map>
- #include<algorithm>
- using namespace std;
- struct Wieszcholek
- {
- public:
- string nazwa_soku;
- int kwasniejsze;
- deque<int> slotsze;
- };
- int main()
- {
- std::cin.tie(NULL);
- ios_base::sync_with_stdio(false);
- int li_wierzcholkow;
- int li_krawedzi;
- string buf1;
- string buf2;
- int indeks1;
- int indeks2;
- cin>>li_wierzcholkow;
- cin>>li_krawedzi;
- deque<Wieszcholek> wieszcholki;
- map<string,int> mapa;
- for(int i=0; i<li_wierzcholkow; ++i) //tworzenie wierzcholkow
- {
- cin>>buf1;
- Wieszcholek wieszcholek;
- wieszcholek.nazwa_soku=buf1;
- wieszcholek.kwasniejsze=0;
- wieszcholki.push_back(wieszcholek);
- mapa[buf1]=i;
- }
- for(int j=0; j<li_krawedzi; ++j) //tworzenie polaczen
- {
- cin>>buf1;
- cin>>buf2;
- wieszcholki[mapa[buf1]].slotsze.push_back(mapa[buf2]);
- ++wieszcholki[mapa[buf2]].kwasniejsze;
- }
- //wyszukiwanie, wypisywanie i usowanie naj bardziej kwasnych sokow
- deque<int> buf_wskazniki;
- for(int k=0; k<li_wierzcholkow; ++k)//twozrenie listy sokow do usuniecia
- {
- if(wieszcholki[k].kwasniejsze==0)
- {
- buf_wskazniki.push_back(k);
- }
- }
- while(buf_wskazniki.empty()!=true) //dopuki kolejka do uswania nie jest pusta
- {
- int wieszcholek_do_usuniecia=buf_wskazniki.front();
- while(wieszcholki[wieszcholek_do_usuniecia].slotsze.empty()!=true) //dopuki lista slotszych elementow nie jest pusta
- {
- int wieszcholek_do_zmniejszenia=wieszcholki[wieszcholek_do_usuniecia].slotsze.front();
- --wieszcholki[wieszcholek_do_zmniejszenia].kwasniejsze; //zmniejszanie iloœci kwasniejszych sokow
- if(wieszcholki[wieszcholek_do_zmniejszenia].kwasniejsze==0)
- {
- buf_wskazniki.push_back(wieszcholek_do_zmniejszenia);
- }
- wieszcholki[wieszcholek_do_usuniecia].slotsze.pop_front();
- }
- cout<<wieszcholki[wieszcholek_do_usuniecia].nazwa_soku<<endl;
- wieszcholki[wieszcholek_do_usuniecia].kwasniejsze=-1; //wierzcholek do usuniecia ustaw na -1
- buf_wskazniki.pop_front();
- sort(buf_wskazniki.begin(), buf_wskazniki.end());
- }
- for(int l=0 ;l<li_wierzcholkow; ++l)
- {
- wieszcholki.pop_front();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement