同BZOJ4006
#include<iostream>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<cstdlib>
#include<cstdio>
#include<map>
#include<bitset>
#include<set>
#include<stack>
#include<vector>
#include<queue>
using namespace std;
#define MAXN 10010
#define MAXM 10010
#define MAXD 256
#define ll long long
#define eps 1e-8
#define MOD 1000000007
#define INF 1000000000
struct vec{
int to;
int fro;
int v;
};
vec mp[MAXM*2];
int tai[MAXN],cnt;
int n,m,p;
vector<int>ps[20];
int f[MAXD];
int g[MAXD][MAXN];
int col[MAXN],c;
int t[MAXN],tot;
int q[MAXN],hd,tl;
bool iq[MAXN];
int nc[MAXN],NC;
int num[MAXN];
inline void be(int x,int y,int z){
mp[++cnt].to=y;
mp[cnt].fro=tai[x];
tai[x]=cnt;
mp[cnt].v=z;
}
inline void bde(int x,int y,int z){
be(x,y,z);
be(y,x,z);
}
void spfa(int *g){
int i,x,