#include<cstdio> #include<vector> #define MAXN 200003 #define MAXK 500003 using namespace std; struct sub{ int ind; int ilosc; }; sub act,pom; int n,m,k; //int g[MAXN]; int g,war; int a[MAXN]; int b[MAXN]; int c[MAXK]; int d[MAXK]; int tab[MAXN]; long long res; vector<sub> V[MAXN]; int main(){ scanf("%d",&n); scanf("%d",&m); scanf("%d",&k); for(int i=0;i<n;i++){ scanf("%d",&g); pom.ind = i; pom.ilosc = g; V[i].push_back(pom); } for(int i=0;i<m;i++){ scanf("%d %d",&a[i],&b[i]); a[i]--; b[i]--; } for(int i=0;i<k;i++){ scanf("%d %d",&c[i],&d[i]); c[i]--; d[i]--; } for(int i=0;i<m;i++){ //wrzuc substancje z V[a] i z V[b] do tablicy while(!V[a[i]].empty()){ act = V[a[i]].back(); V[a[i]].pop_back(); tab[act.ind] = act.ilosc; } while(!V[b[i]].empty()){ act = V[b[i]].back(); V[b[i]].pop_back(); tab[act.ind] = act.ilosc; } for(int j=0;j<k;j++){ war = min(tab[c[j]],tab[d[j]]); tab[c[j]] -= war; tab[d[j]] -= war; res += war; } for(int j=0;j<n;j++){ act.ind = j; act.ilosc = tab[j]; if(act.ilosc > 0)V[b[i]].push_back(act); tab[j] = 0; } } printf("%lld\n",(res*2LL)); return 0; }
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 | #include<cstdio> #include<vector> #define MAXN 200003 #define MAXK 500003 using namespace std; struct sub{ int ind; int ilosc; }; sub act,pom; int n,m,k; //int g[MAXN]; int g,war; int a[MAXN]; int b[MAXN]; int c[MAXK]; int d[MAXK]; int tab[MAXN]; long long res; vector<sub> V[MAXN]; int main(){ scanf("%d",&n); scanf("%d",&m); scanf("%d",&k); for(int i=0;i<n;i++){ scanf("%d",&g); pom.ind = i; pom.ilosc = g; V[i].push_back(pom); } for(int i=0;i<m;i++){ scanf("%d %d",&a[i],&b[i]); a[i]--; b[i]--; } for(int i=0;i<k;i++){ scanf("%d %d",&c[i],&d[i]); c[i]--; d[i]--; } for(int i=0;i<m;i++){ //wrzuc substancje z V[a] i z V[b] do tablicy while(!V[a[i]].empty()){ act = V[a[i]].back(); V[a[i]].pop_back(); tab[act.ind] = act.ilosc; } while(!V[b[i]].empty()){ act = V[b[i]].back(); V[b[i]].pop_back(); tab[act.ind] = act.ilosc; } for(int j=0;j<k;j++){ war = min(tab[c[j]],tab[d[j]]); tab[c[j]] -= war; tab[d[j]] -= war; res += war; } for(int j=0;j<n;j++){ act.ind = j; act.ilosc = tab[j]; if(act.ilosc > 0)V[b[i]].push_back(act); tab[j] = 0; } } printf("%lld\n",(res*2LL)); return 0; } |