#include //#include using namespace std; //using namespace atcoder; using ll = long long; //using mint = modint998244353; int main(){ cin.tie(nullptr); ios_base::sync_with_stdio(false); /* 葉の頂点の純粋さの多重集合を持っておく。 これから純粋さが最大のものを答えに足し、多重集合から取り除く。 取り除くことで新たに葉になる頂点が出てくる可能性があることに注意。 時刻iに汚染されるような葉の頂点の集合v(i)を求めておき、(i<=10^5) 取り除くたびにiをインクリメントしてv(i)に対応する純粋さを多重集合から取り除く。 */ ll N, M; cin >> N >> M; vector P(N), deg(N); for (int i=0; i> P[i]; vector> E(N); for (int i=0; i> a >> b; a--; b--; E[a].push_back(b); E[b].push_back(a); deg[a]++; deg[b]++; } vector C(M); for (int i=0; i> C[i]; C[i]--; } vector dist(N, 1e9); queue que; for (int i=0; i> pq; vector> v(N+1); vector ng(N); for (int i=0; i