#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
#define inf 0x3fffffff
#define N 550
struct node {
int u,v,w,next;
}bian[N*20],ff[N*20],fk[N];
int vis[N];
int head[N],yong,dis[N],work[N];
int ans[N];
void init() {
yong=0;
memset(head,-1,sizeof(head));
}
void addedge(int u,int v,int w) {
bian[yong].v=v;
bian[yong].w=w;
bian[yong].next=head[u];
head[u]=yong++;
}
int bfs(int s,int t)
{
memset(dis,-1,sizeof(dis));
queue<int>q;
q.push(s);
dis[s]=0;
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=head[u];i!=-1;i=bian[i].next)
{
int v=bian[i].v;
if(bian[i].w&&dis[v]==-1)
{
dis[v]=dis[u]+1;
q.push(v);
if(v==t)
return 1;
}
}
}
return 0;
}
int dfs(int s,int limit,int t)
{
if(s==t)return limit;
for(int &i=work[s];i!=-1;i=bian[i].next)
{
int v=bian[i].v;
if(bian[i].w&&dis[v]==dis[s]+1)
{
int tt=dfs(v,min(limit,bian[i].w),t);
if(tt)
{
bian[i].w-=tt;
bian[i^1].w+=tt;
return tt;
}
}
}
return 0;
}
int dinic(int s,int t)
{
int ans=0;
while(bfs(s,t))
{
memcpy(work,head,sizeof(head));
while(int tt=dfs(s,inf,t))
ans+=tt;
}
return ans;
}
void build(int t,int m,int kk,int f) {
init();
int i;
for(i=1;i<=m;i++) {
addedge(ff[i].u,ff[i].v,1);
addedge(ff[i].v,ff[i].u,1);
}
for(i=1;i<=kk;i++) {
if(fk[i].v&(1<<f)) {
addedge(0,fk[i].u,inf);
addedge(fk[i].u,0,0);
}
else {
addedge(fk[i].u,t,inf);
addedge(t,fk[i].u,0);
}
}
return ;
} void dfs1(int u,int kk) {
int i;
vis[u]=1;
for(i=head[u];i!=-1;i=bian[i].next) {
int v=bian[i].v;
if(!vis[v]&&bian[i].w) {
ans[v]|=(1<<kk);
dfs1(v,kk);
}
}
return ;
}
void print() {
int i;
for(i=0;i<yong;i++)
printf("%d %d %d\n",bian[i].u,bian[i].v,bian[i].w);
}
int main() {
int n,m,i,kk,t,k;
scanf("%d",&t);
while(t--) {
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
scanf("%d%d",&ff[i].u,&ff[i].v);
scanf("%d",&kk);
for(i=1;i<=kk;i++)
scanf("%d%d",&fk[i].u,&fk[i].v);
memset(ans,0,sizeof(ans));
for(k=0;k<31;k++) {
build(n+1,m,kk,k);
// print();break;
dinic(0,n+1);
// printf("%d\n",dinic(0,n+1));
memset(vis,0,sizeof(vis));
dfs1(0,k);
}
for(i=1;i<=n;i++)
printf("%d\n",ans[i]);
}
return 0;}

最新文章

  1. mysql 多版本并发控制
  2. 数据库imp导表dmp的方法
  3. MYSQL 查询出最大/最小值所在的记录
  4. php 反射
  5. QT分页控件,开源,供大家使用
  6. 【读书笔记】iOS-引用计数
  7. 【杂记】SQL篇
  8. 关于requestFeature() must be called before adding content
  9. 调色板QPalette类用法详解(附实例、源码)
  10. 设置div中文字超出时自动换行
  11. 如何诊断crs 安装时 root.sh 脚本执行错误
  12. 用newLISP读取Hive的元数据
  13. ural1628 White Streaks
  14. AT24C02使用详解
  15. 【SSH系列】Hibernate映射 -- 一对一单向关联映射
  16. Spring boot加载REACTIVE源码分析
  17. [Postman]代理(16)
  18. kali linux源大全
  19. 【RNN】资源汇总
  20. 学习excel的使用技巧三快捷键和思路

热门文章

  1. Suricata里的规则与Snort区别之处
  2. WIN2003 IIS相关错误解决方案
  3. 【学习笔记】响应式布局的常用解决方案(媒体查询、百分比、rem、和vw/vh)
  4. 搭建SSM框架(聚合项目)
  5. Xilinx HLS
  6. Performance testing architecture
  7. 再遇BGP
  8. python基础一 day5 知识点
  9. MessageBox的使用
  10. 微信小程序---宿主环境