#pragma comment(linker, "/STACK:102412345,102412345") #include #include #include #include #include #include #include #include #include #define mod 1000000007 #define maxn 100010 using namespace std; void read(int& x){x=0;char ch; do ch=getchar();while(ch<'0'||ch>'9'); do x=x*10+ch-'0',ch=getchar();while(ch<='9'&&ch>='0'); } int cnt; struct Edge{int to;Edge *next; }*E[maxn],Pr[maxn<<1]; void addedge(int u,int v){ Pr[++cnt].to=v;Pr[cnt].next=E[u];E[u]=&Pr[cnt]; Pr[++cnt].to=u;Pr[cnt].next=E[v];E[v]=&Pr[cnt]; } int n,m,size[maxn]; double Ans[maxn]; int V[maxn]; vector has[maxn],chd[maxn]; int Now[maxn]; void dfs(int u,int f){ size[u]=1; for(Edge *P=E[u];P;P=P->next)if(P->to!=f)dfs(P->to,u),size[u]+=size[P->to]; if(size[u]==1){ Ans[u]=V[u];has[u].push_back(V[u]); return; } for(Edge *P=E[u];P;P=P->next)if(P->to!=f)chd[u].push_back(P->to); for(int i=0;ihas[chd[u][j]][Now[chd[u][j]]]))v=chd[u][j]; if(v==-1||(flag&&V[u]next)if(P->to!=f)has[P->to].clear(),chd[P->to].clear(); } int main(){int T; scanf("%d",&T); while(T--){ memset(E,0,sizeof(E));cnt=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)has[i].clear(),chd[i].clear(); for(int i=1;i<=n;i++)read(V[i]); for(int i=1;i