← Home
write a go solution for Description:
You are given a simple undirected graph, consisting of n vertices and m edges. The vertices are numbered from 1 to n. The i-th vertex has a value a_i written on it.

You will be removing vertices from that graph. You are allowed to remove vertex i only if its degree is equal to a_i. When a vertex is removed, all edges incident to it are also removed, thus, decreasing the degree of adjacent non-removed vertices.

A valid sequence of removals is a permutation p_1,p_2,...,p_n (1<=p_i<=n) such that the i-th vertex to be removed is p_i, and every removal is allowed.

A pair (x,y) of vertices is nice if there exist two valid sequences of removals such that x is removed before y in one of them and y is removed before x in the other one.

Count the number of nice pairs (x,y) such that x<y.

Input Format:
The first line contains a single integer t (1<=t<=10^4) — the number of testcases.

The first line of each testcase contains two integers n and m (1<=n<=10^5; 0<=m<=min(10^5,n*(n-1)/2)) — the number of vertices and the number of edges of the graph.

The second line contains n integers a_1,a_2,...,a_n (0<=a_i<=n-1) — the degree requirements for each removal.

Each of the next m lines contains two integers v and u (1<=v,u<=n; vnequ) — the description of an edge.

The graph doesn't contain any self-loops or multiple edges.

The sum of n over all testcases doesn't exceed 10^5. The sum of m over all testcases doesn't exceed 10^5.

Additional constraint on the input: there always exists at least one valid sequence of removals.

Output Format:
For each testcase, print a single integer — the number of nice pairs of vertices.

Note:
None. Output only the code with no comments, explanation, or additional text.