#include"bits/stdc++.h"
using namespace std;
vector<int> g[201000];
struct node {
long long pd;
int pa;
int id;
node(int id, int pa, long long pd): id(id), pa(pa), pd(pd) {}
bool operator<(const node& nd) const {
return pd > nd.pd || pd == nd.pd && pa > nd.pa;
}
};
int main() {
// freopen("E.in" , "r" , stdin);
// freopen("E.out" , "w" , stdout);
int n, m;
cin >> n >> m;
vector<int> a(n+1);
for (int i = 1; i <= n; ++i) cin >> a[i];
vector<long long > d(n+1);
for (int i = 0; i < m; ++i) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
d[u] += a[v];
d[v] += a[u];
}
long long ans = 0;
priority_queue<node> q;
for (int i = 1; i <= n; ++i) {
q.push(node(i, a[i], d[i]));
}
while (!q.empty()) {
node t = q.top(); q.pop();
int x = t.id;
if (d[x] == -1 || d[x] != t.pd) continue;
ans = max(ans, d[x]);
d[x] = -1;
for (int i = 0; i < g[x].size(); ++i) {
int y = g[x][i];
if (d[y] == -1) continue;
d[y] -= a[x];
q.push(node(y, a[y], d[y]));
}
}
cout << ans << endl;
return 0;
}
./Main.cpp: In constructor ‘node::node(int, int, long long int)’:
./Main.cpp:9:9: warning: ‘node::id’ will be initialized after [-Wreorder]
9 | int id;
| ^~
./Main.cpp:8:9: warning: ‘int node::pa’ [-Wreorder]
8 | int pa;
| ^~
./Main.cpp:10:5: warning: when initialized here [-Wreorder]
10 | node(int id, int pa, long long pd): id(id), pa(pa), pd(pd) {}
| ^~~~
./Main.cpp:8:9: warning: ‘node::pa’ will be initialized after [-Wreorder]
8 | int pa;
| ^~
./Main.cpp:7:15: warning: ‘long long int node::pd’ [-Wreorder]
7 | long long pd;
| ^~
./Main.cpp:10:5: warning: when initialized here [-Wreorder]
10 | node(int id, int pa, long long pd): id(id), pa(pa), pd(pd) {}
| ^~~~
./Main.cpp: In member function ‘bool node::operator<(const node&) const’:
./Main.cpp:12:42: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
12 | return pd > nd.pd || pd == nd.pd && pa > nd.pa;
| ~~~~~~~~~~~~^~~~~~~~~~~~~
./Main.cpp: In function ‘int main()’:
./Main.cpp:43:27: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
43 | for (int i = 0; i < g[x].size(); ++i) {
| ~~^~~~~~~~~~~~~