#include <iostream> #include <algorithm> #include <cstdio> //#include <list> #include <set> using namespace std; int n,m,k,a,b,c,d,g; long long osad, wynik; int tab[200005]; set <int> fiolki[200005]; struct krok { int jeden; int dwa; }; krok instrukcje[200005]; krok reakcje[500005],x; void dodaj(set<int> v, set<int> b) { set<int>::iterator it; b.insert(v.begin(), v.end()); /* for (it=b.begin(); it!=b.end(); ++it) cout << ' ' << *it; cout << '\n';*/ int r; for(int i=0; i<m; i++) { set<int>::iterator y,t; y = b.find(reakcje[i].jeden); if( y!=b.end() ) { t=b.find(reakcje[i].dwa); if(t!=b.end()) { r=min(tab[reakcje[i].jeden],tab[reakcje[i].dwa]); tab[reakcje[i].jeden]-=r; tab[reakcje[i].dwa]-=r; wynik+=2*r; } }//cout << "jest } } int main() { scanf("%d %d %d", &n, &m, &k); for(int i=1; i<=n; i++) { fiolki[i].insert(i); scanf("%d", &tab[i]); } for(int i=0; i<m; i++) { scanf("%d %d", &a, &b); x.jeden=a; x.dwa=b; instrukcje[i]=x; } for(int i=0; i<k; i++) { scanf("%d %d", &a, &b); x.jeden=a; x.dwa=b; reakcje[i]=x; } // dodaj(fiolki[1], fiolki[2]); for(int i=0; i<m; i++) { dodaj(fiolki[instrukcje[i].jeden], fiolki[instrukcje[i].dwa]); } printf("%d\n", wynik); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #include <iostream> #include <algorithm> #include <cstdio> //#include <list> #include <set> using namespace std; int n,m,k,a,b,c,d,g; long long osad, wynik; int tab[200005]; set <int> fiolki[200005]; struct krok { int jeden; int dwa; }; krok instrukcje[200005]; krok reakcje[500005],x; void dodaj(set<int> v, set<int> b) { set<int>::iterator it; b.insert(v.begin(), v.end()); /* for (it=b.begin(); it!=b.end(); ++it) cout << ' ' << *it; cout << '\n';*/ int r; for(int i=0; i<m; i++) { set<int>::iterator y,t; y = b.find(reakcje[i].jeden); if( y!=b.end() ) { t=b.find(reakcje[i].dwa); if(t!=b.end()) { r=min(tab[reakcje[i].jeden],tab[reakcje[i].dwa]); tab[reakcje[i].jeden]-=r; tab[reakcje[i].dwa]-=r; wynik+=2*r; } }//cout << "jest } } int main() { scanf("%d %d %d", &n, &m, &k); for(int i=1; i<=n; i++) { fiolki[i].insert(i); scanf("%d", &tab[i]); } for(int i=0; i<m; i++) { scanf("%d %d", &a, &b); x.jeden=a; x.dwa=b; instrukcje[i]=x; } for(int i=0; i<k; i++) { scanf("%d %d", &a, &b); x.jeden=a; x.dwa=b; reakcje[i]=x; } // dodaj(fiolki[1], fiolki[2]); for(int i=0; i<m; i++) { dodaj(fiolki[instrukcje[i].jeden], fiolki[instrukcje[i].dwa]); } printf("%d\n", wynik); } |