这道题的原题目我也不知道是什么。

大致题意是有一个图,有些点的权值已确定,要求你确定其他点的权值使所有边两个点的权值的xor和最小,输出所有点的最终权值,输出有spj;

解法是最小割,由于题目要求的使xor的和最小,那么可以对一位一位考虑;

既然可以这样考虑,那么我们要求的就是在固定了一些点的0/1值的情况下,使xor为1的结果数最少,xor的性质是不相同值为1,相同值为0;

那么就是最小割了,将已确定为0的与s/t连边,将已确定为1de与s/t连边,跑最小割,在残余网络上记录方案;

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<ctime>
#include<cstdlib>
#include<algorithm>
using namespace std;
#define LL long long
#define up(i,j,n) for(int i=(j);i<=(n);i++)
#define FILE "dealing"
#define pii pair<int,int>
int read(){
int ch=getchar(),x=0,f=1;
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch<='9'&&ch>='0')x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return f*x;
}
const int maxn=10010,inf=100000000;
int n,m,k,limit,s=0,t=501;
struct node{
int y,next,flow,rev;
}e[maxn];
int linkk[maxn],len=0;
int f[maxn][33],cnt=0,vis[maxn],c[maxn],z[maxn],X[maxn],Y[maxn],T[maxn];
void insert(int x,int y,int flow){
e[++len].y=y;
e[len].flow=flow;
e[len].next=linkk[x];
linkk[x]=len;
e[len].rev=len+1;
e[++len].y=x;
e[len].flow=0;
e[len].next=linkk[y];
e[len].rev=len-1;
linkk[y]=len;
}
int q[maxn],d[maxn],head,tail;
bool makelevel(){
head=tail=0;
memset(d,-1,sizeof(d));
q[++tail]=s;d[s]=0;int x;
while(++head<=tail){
x=q[head];
for(int i=linkk[x];i;i=e[i].next)
if(d[e[i].y]==-1&&e[i].flow)q[++tail]=e[i].y,d[e[i].y]=d[x]+1;
}
return d[t]!=-1;
}
int makeflow(int x,int flow){
if(x==t)return flow;
if(!flow)return 0;
int dis=0,maxflow=0;
for(int i=linkk[x];i&&maxflow<flow;i=e[i].next){
if(e[i].flow&&d[e[i].y]==d[x]+1)
if(dis=makeflow(e[i].y,min(e[i].flow,flow-maxflow))){
e[e[i].rev].flow+=dis;
e[i].flow-=dis;
maxflow+=dis;
}
}
if(!maxflow)d[x]=-1;
return maxflow;
}
int dinic(){
int d,ans=0;
while(makelevel())
while(d=makeflow(s,inf))
ans+=d;
return ans;
}
void dfs(int x){
vis[x]=1;
for(int i=linkk[x];i;i=e[i].next)
if(!vis[e[i].y]&&e[i].flow)dfs(e[i].y);
}
int main(){
n=read(),m=read();
up(i,1,m)X[i]=read(),Y[i]=read();
k=read();
up(i,1,k){
c[i]=read();T[c[i]]=1;
int x=z[i]=read(),cnt=0;
while(x){
f[c[i]][++cnt]=x%2;
x/=2;
}
limit=max(limit,cnt);
}
up(i,1,limit){
len=0;
memset(linkk,0,sizeof(linkk));
int f1=0,f2=0;
up(j,1,k){
if(f[c[j]][i]==0)insert(c[j],t,inf),f1=1;
else insert(s,c[j],inf),f2=1;
}
up(j,1,m)insert(X[j],Y[j],1),insert(Y[j],X[j],1);
dinic();
memset(vis,0,sizeof(vis));
dfs(s);
if(f1&&f2)up(j,1,n)if(!T[j]&&vis[j])f[j][i]=1;
}
up(i,1,n){
int x=0;
up(j,1,limit)if(f[i][j])x+=(1<<j-1);
printf("%d\n",x);
}
return 0;
}

  

p1349星屑幻想的更多相关文章

  1. 星屑幻想 optimal mark

    LINK :SP839 星屑幻想 取自 OJ 的名称 小事情...题目大意还是要说的这道题比较有意思,想了一段时间. 给你一张图 这张图给答案带来的贡献是每条边上两个点值得异或 一些点的值已经被确定 ...

  2. JZYZOJ1349 SPOJ839 星屑幻想 xor 网络流 最大流

    http://172.20.6.3/Problem_Show.asp?id=1349 调了两个小时发现数组开小了[doge].题意:给出几个点,有的点的权值确定,连接两点的边的权值为两点值的异或和,求 ...

  3. BZOJ4596: [Shoi2016]黑暗前的幻想乡

    Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪 ...

  4. Redis 的性能幻想与残酷现实

    2011 年,当初选择 Redis 作为主要的内存数据存储,主要吸引我的是它提供多样的基础数据结构可以很方便的实现业务需求.另一方面又比较担心它的性能是否足以支撑,毕竟当时 Redis 还属于比较新的 ...

  5. 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]

    P1962 斐波那契数列 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数 ...

  6. BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡

    3926: [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1017  Solved: 599[Submit][S ...

  7. BZOJ3925: [Zjoi2015]地震后的幻想乡

    Description 傲娇少女幽香是一个很萌很萌的妹子,而且她非常非常地有爱心,很喜欢为幻想乡的人们做一些自己力所能及的事情来帮助他们. 这不,幻想乡突然发生了地震,所有的道路都崩塌了.现在的首要任 ...

  8. hiho#1145 : 幻想乡的日常

    描述 幻想乡一共有n处居所,编号从1到n.这些居所被n-1条边连起来,形成了一个树形的结构. 每处居所都居住着一个小精灵.每天小精灵们都会选出一个区间[l,r],居所编号在这个区间内的小精灵一起来完成 ...

  9. BZOJ3924 [Zjoi2015]幻想乡战略游戏

    Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来, ...

随机推荐

  1. L3,please send me a card

    expressions: a few words几句话 lend sb sth或lend sth to sb borrow sth或borrow sth from sb 都表示借,但是行为不同. wo ...

  2. HDU 5903 (DP)

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...

  3. USER-AGENT是什么

    USER-AGENT是什么? USER-AGENT:记录请求所来自的浏览器. User-Agent分析网站 http://www.useragentstring.com/ 通过解析User-Agent ...

  4. java+tomcat+Eclipse+mysql配置

    Java下载及配置: 1. 下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...

  5. javascript 中arguments.callee 调用自身

    一.Arguments该对象代表正在执行的函数和调用他的函数的参数.[function.]arguments[n]参数function :选项.当前正在执行的 Function 对象的名字.n :选项 ...

  6. backBarButtonItem无效

    控制器A push-> 控制器B, 我设置了B的backBarButtonItem为“返回”,发现无效... 原因: 应该在控制器A中设置backBarButtonItem,这样在push B之 ...

  7. Qt5:Qt中图片的翻转,旋转,缩放,扭曲操作

    具体用到了  mirror()  shear()  scaled() translate() rotate() 等函数函数等会儿再写 (其中  translate() 和 rotate() 俩函数组合 ...

  8. vc6 pbo 文件为空的解决方法

    使用Profile调试vc6应用程序的性能时,将生成pbo文件,今天在vc IDE中增加了命令行启动参数,导致profile无法生成pbo文件,进而无法生成性能报告. 解决方法: 去掉IDE中的命令行 ...

  9. 考分鄙视(exam)

    考分鄙视(exam) 题目描述 Whence这个学期考了n次试,每一次都有一个0-20000之间的整数分数.Whence本来的状态应该是每一次考试都比前一次多一分(除第一次),但由于他很不稳定,偏差可 ...

  10. swift之向ftp服务器传文件

    在 mac 上如何使用 xcode, swift 语言开发一个向 ftp 服务器上传文件的工具? 使用的是第三方库 Rebekka,下载地址为:https://github.com/Constanti ...