【bzoj2893】征服王

比较明显的缩点,变成dag上最小路径覆盖,指定了起点终点所以建模有一些变化。

跑费用流,增广的次数即为答案。

#include<bits/stdc++.h>
#define maxn 5005
#define maxm 100005
#define INF 0x7f7f7f7f
using namespace std;

inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
    return x*f;
}

struct scsc{
    int next,from,to,w,c;
}edge[maxm<<1];

struct _scsc{
    int next,to;
}_edge[maxm<<1];

int n,m,_Len,Len,scc,top,Time,_head[maxn],head[maxn],dfn[maxn],low[maxn],s[maxn],vis[maxn],hav[maxn],belong[maxn],p[maxn][2];
int sss,ttt,ss[maxn],tt[maxn],d[maxn],pre[maxn];

void addedge(int u,int v,int w,int c){
    edge[++Len].to=v;edge[Len].from=u;edge[Len].next=head[u];edge[Len].w=w;edge[Len].c=c;head[u]=Len;
    edge[++Len].to=u;edge[Len].from=v;edge[Len].next=head[v];edge[Len].w=0;edge[Len].c=-c;head[v]=Len;
}

void _addedge(int u,int v){
    _edge[++_Len].to=v;_edge[_Len].next=_head[u];_head[u]=_Len;
}

void tarjan(int u){
    dfn[u]=low[u]=++Time;
    s[++top]=u;vis[u]=1;
    for(int i=_head[u];i;i=_edge[i].next){
        int v=_edge[i].to;
        if(!dfn[v]){
            tarjan(v);
            low[u]=min(low[u],low[v]);
        }else
        if(vis[v])low[u]=min(low[u],dfn[v]);
    }
    int now=0;
    if(dfn[u]==low[u]){
        ++scc;
        while(now!=u){
            now=s[top--];
            vis[now]=0;
            ++hav[scc];
            belong[now]=scc;
        }
    }
}

int id=0;

void rebuild(int s,int t){
    for(int i=1;i<=scc;++i)p[i][0]=++id,p[i][1]=++id;
    for(int i=1;i<=sss;++i)addedge(s,p[belong[ss[i]]][0],INF,0);
    for(int i=1;i<=ttt;++i)addedge(p[belong[tt[i]]][1],t,INF,0);
    for(int i=1;i<=scc;++i)addedge(p[i][0],p[i][1],1,1),addedge(p[i][0],p[i][1],INF,0);
    for(int u=1;u<=n;++u){
        for(int i=_head[u];i;i=_edge[i].next){
            int v=_edge[i].to;
            if(belong[u]!=belong[v])
                addedge(p[belong[u]][1],p[belong[v]][0],INF,0);
        }
    }
}

int spfa(int s,int t){
    queue<int>Q;
    memset(d,-1,sizeof(d));
    Q.push(s);vis[s]=1;d[s]=0;
    while(!Q.empty()){
        int u=Q.front();Q.pop();
        for(int i=head[u];i;i=edge[i].next){
            int v=edge[i].to;
            if(edge[i].w&&d[v]<d[u]+edge[i].c){
                d[v]=d[u]+edge[i].c;pre[v]=i;
                if(!vis[v]){
                    vis[v]=1;
                    Q.push(v);
                }
            }
        }
        vis[u]=0;
    }
    return d[t]!=-1;
}

int mcmf(int s,int t){
    int ret=0,now=0,last=0;
    while(spfa(s,t)){
        int w=INF;last=now;
        for(int i=pre[t];i;i=pre[edge[i].from])w=min(w,edge[i].w);
        for(int i=pre[t];i;i=pre[edge[i].from]){
            edge[i].w-=w;
            edge[i^1].w+=w;
            now+=w*edge[i].c;
        }
        if(now==last)break;
        ++ret;
    }
    if(now!=scc)return -1;
    return ret;
}

void Init(){
    Len=1;memset(head,0,sizeof(head));id=scc=0;
    _Len=0;memset(_head,0,sizeof(_head));
    memset(pre,0,sizeof(pre));
    memset(dfn,0,sizeof(dfn));
    memset(low,0,sizeof(low));
    int f1,f2;
    n=read();m=read();sss=read();ttt=read();
    for(int i=1;i<=sss;++i)ss[i]=read();
    for(int i=1;i<=ttt;++i)tt[i]=read();
    for(int i=1;i<=m;++i){
        f1=read();f2=read();
        _addedge(f1,f2);
    }
}

void WoRk(){
    for(int i=1;i<=n;++i)if(!dfn[i])tarjan(i);
    int s=0,t=2*n+1;
    rebuild(s,t);
    int ans=mcmf(s,t);
    if(ans==-1)printf("no solution\n");else printf("%d\n",ans);
}

int main(){
    int t=read();
    while(t--){
        Init();
        WoRk();
    }
    return 0;
}
时间: 2024-08-13 00:32:45

【bzoj2893】征服王的相关文章

BZOJ2893: 征服王

题解: 裸的上下界最小流是有问题的.因为在添加了附加源之后求出来的流,因为s,t以及其它点地位都是平等的.如果有一个流经过了s和t,那么总可以认为这个流是从s出发到t的满足题意的流. 既然可能存在s到t的流,那么也可能会存在不经过s和t的流,而这是一条环流!!起点不是s,也不是t!显然不满足题意!!! 为了避免环流的出现,我们只好缩点...(本来想偷懒不缩的...) 所以整个算法就是缩点之后上下界最小流. 代码:无压力rank1了... 1 #include<cstdio> 2 3 #incl

2016年12月 极高的人声表现 征服挑剔的耳朵《人声斗机王》2CD WAV分轨

专辑名称:人声斗机王 2CD 专辑艺人:群星 唱片公司:深圳音像公司 发行时间:2016年12月 资源格式:UPDTS-WAV分轨 专辑简介: 极品靓声王精品人声,音色悦耳.悠扬.细致,乐器的质感鲜明无比,仿佛伸手可触.加上充沛的能量感,使音乐听起来更具生命力,临场感浓郁,舞台立体浮凸的在眼前呈现,聆听者彷佛坐在圆桌旁,活生的现场感传神十足.然就是这个有着极高的人声表现和录音品质的HIFI音乐,征服挑剔的耳朵 曲目 专辑曲目CD101.酒干倘卖无--孙露02.我真的好难过--小骆驼03.你走你的

为什么征服世界的饮料是可口可乐而不是芬达?

中立的手指 2017-05-30 12:31:16 一切都要从八十年前说起. 虽然可口可乐如今风靡全球,但直到上世纪四十年代,全世界大部分地方还不太买这种饮料的账.第二次世界大战爆发之前,可口可乐在国际舞台上取得的唯一成就是在纳粹德国的装瓶业务. 纳粹时期的可乐海报 1929年,美国人雷布斯(Ray Powers)把可口可乐带去了德国.他努力工作,他雄心勃勃,到了1933年,可口可乐在德国的销量已经从最初的每年6000箱提升到每年10万箱.在一战结束后那段混乱的时期里,雷布斯的事业可谓非常成功,

不是说朝闻道夕死可矣吗(如果你发现了自己的学习模式,愿意学并且能坚持,我觉得没什么能阻挡你征服软件世界的脚步),安晓辉大神的感悟

从技术支持中途转战软件开发,如今从事编程工作已十多有余,2014年CSDN博文大赛编程语言组冠军.CSDN Qt论坛的版主安晓辉老师从今天开始,坐镇CSDN社区问答栏目的 第十四期,届时会接受广大网友的提问,欢迎各位网友前来与安老师一起交流. 当Qt跨界牵手Android,移动开发会有什么不同?初学者如何借助Qt开发Android应用?安晓辉老师将携 <Qt on Android 核心编程>一书,接受网友们关于Qt on Android的相关提问,与此同时,也欢迎大家来与安老师交流程序员入行.

老男孩教育46期-王定康

我叫王定康,出生于江西省九江市,在九江县育英学校读高中.从学校出来后从事电子制造SMT六年.感觉做了那么久的一线员工,什么规划也没有,想换个环境换个工作.后来从朋友哪里听说了老男孩IT教育,自己也查询了关于老男孩教育的资料,看了之后,感觉很有兴趣,想尝试下,就选择了老男孩教育. 五个月学完,目标薪资五位数吧.达到目的给自己买个8000的本本.达不到罚自己比之前更刻苦学习. 为了目标,每天认真听老师讲解,做笔记,复习.下课后,总结今天所学,掌握重要知识点.每周六,日复习一周所学,不懂,不理解的要向

彻底征服 Spring AOP 之 实战篇

接上一小节彻底征服 Spring AOP 之 理论篇 Spring AOP 实战 看了上面这么多的理论知识, 不知道大家有没有觉得枯燥哈. 不过不要急, 俗话说理论是实践的基础, 对 Spring AOP 有了基本的理论认识后, 我们来看一下下面几个具体的例子吧.下面的几个例子是我在工作中所遇见的比较常用的 Spring AOP 的使用场景, 我精简了很多有干扰我们学习的注意力的细枝末节, 以力求整个例子的简洁性. 下面几个 Demo 的源码都可以在我的 Github 上下载到. HTTP 接口

彻底征服 Spring AOP 之 理论篇

基本知识 其实, 接触了这么久的 AOP, 我感觉, AOP 给人难以理解的一个关键点是它的概念比较多, 而且坑爹的是, 这些概念经过了中文翻译后, 变得面目全非, 相同的一个术语, 在不同的翻译下, 含义总有着各种莫名其妙的差别. 鉴于此, 我在本章的开头, 着重为为大家介绍一个 Spring AOP 的各项术语的基本含义. 为了术语传达的准确性, 我在接下来的叙述中, 能使用英文术语的地方, 尽量使用英文. 什么是 AOP AOP(Aspect-Oriented Programming),

[HNOI2015]亚瑟王

题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的. 作为一个非洲人,同时作为一个前 OIer,小 K 自然是希望最大化造成伤害的期望值.但他已经多年没写过代码,连 Spaly都敲不对了,因此,希望你能帮帮小 K,让他感受一下当欧洲人是怎样的体验. 本题中我们将考虑游戏的一个简化版模型. 玩家有一套卡牌,共 n张.游戏时,玩家将

中央部门领导地址维权邮箱和记者手机号码大全2016(王焰)

今日说法信箱:[email protected] 焦点访谈信箱:[email protected] 社会记录信箱:[email protected] 信息发布:[email protected] [email protected] 国防部:[email protected] 监察部:[email protected] 城乡建设部:[email protected]或者[email protected] 国土资源部:[email protected] 参事室:[email protected] <