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
// Sebastian Jaszczur
#include <iostream>
#include <map>
#include <vector>

using namespace std;

vector< map<int, int> > fiolki;

vector< pair<int, int> > lejemy;

vector< pair<int, int> > reakcje;

int main()
{
	ios_base::sync_with_stdio(0);
	int n, m, k;
	cin>>n>>m>>k;
	
	for(int i=0; i<n; i++)
	{
		fiolki.push_back(map<int, int>());
		int a;
		cin>>a;
		fiolki.back()[i] = a; //numeracja od zera!!
	}
	
	for(int i=0; i<m; i++)
	{
		int a, b;
		cin>>a>>b;
		a -= 1;
		b -= 1; //numeracja od zera
		lejemy.push_back(make_pair(a, b));
	}
	
	for(int i=0; i<k; i++)
	{
		int a, b;
		cin>>a>>b;
		a -= 1;
		b -= 1; //numeracja od zera
		reakcje.push_back(make_pair(a, b));
	}
	
	long long unsigned osad = 0;
	
	for(pair<int, int> lan: lejemy)
	{
		for(pair<int, int> reak: reakcje)
		{
			if(fiolki[lan.first].count(reak.first)>0 and fiolki[lan.second].count(reak.second)>0)
			{
				int ilosc = min(fiolki[lan.first][reak.first], fiolki[lan.second][reak.second]);
				fiolki[lan.first][reak.first] -= ilosc;
				fiolki[lan.second][reak.second] -= ilosc;
				osad += 2*ilosc;
			}else if(fiolki[lan.first].count(reak.second)>0 and fiolki[lan.second].count(reak.first)>0)
			{
				int ilosc = min(fiolki[lan.first][reak.second], fiolki[lan.second][reak.first]);
				fiolki[lan.first][reak.second] -= ilosc;
				fiolki[lan.second][reak.first] -= ilosc;
				osad += 2*ilosc;
			}
		}
		for (auto it=fiolki[lan.first].begin(); it!=fiolki[lan.first].end(); ++it)
		{
			if(it->second > 0)
			{
				fiolki[lan.second][it->first] += it->second;
			}
		}
		fiolki[lan.first].clear();
	}
	
	cout<<osad<<"\n";
}
/*
3 2 1
2 3 4
1 2
3 2
2 3
*/