感觉对斯坦纳树还是有很多疑惑啊……
等到时候noip没有爆零的话再回来填坑好了
1 //minamoto 2 #include3 #include 4 #include 5 #include 6 using namespace std; 7 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) 8 char buf[1<<21],*p1=buf,*p2=buf; 9 template inline bool cmin(T&a,const T&b){ return a>b?a=b,1:0;}10 inline int read(){11 #define num ch-'0'12 char ch;bool flag=0;int res;13 while(!isdigit(ch=getc()))14 (ch=='-')&&(flag=true);15 for(res=num;isdigit(ch=getc());res=res*10+num);16 (flag)&&(res=-res);17 #undef num18 return res;19 }20 const int N=1e6+5;21 int head[N],Next[N],ver[N],edge[N],tot;22 inline void add(int u,int v,int e){23 ver[++tot]=v,Next[tot]=head[u],head[u]=tot,edge[tot]=e;24 }25 int col[N],id[N],f[1105][1105],g[1105];26 int vis[N],sum[N],n,m,k;27 queue q;28 void spfa(int now){29 while(!q.empty()){30 int u=q.front();q.pop(),vis[u]=0;31 for(int i=head[u];i;i=Next[i]){32 int v=ver[i];33 if(f[v][now]>f[u][now]+edge[i]){34 f[v][now]=f[u][now]+edge[i];35 if(!vis[v]) vis[v]=1,q.push(v);36 }37 }38 }39 }40 int tmp[11];41 bool check(int S){42 memset(tmp,0,sizeof(tmp));43 for(int i=1;i<=10;++i)44 if(S&(1<