4398: 福慧双修

考虑笨蛋,我们可以枚举出边,然后Dij就可以了。

显然在菊花图的情况下要T

我们考虑分组,对于连1的边,一半强制为出边,一半强制为入边,跑DIJ,然后交换,再做一遍。

然后继续分治下去,这样会发现我们所以状态都能做到,复杂度为O(nlog2n)O(n log^2n)O(nlog2n)

#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int MAXN=40005,MAXE=200005;
int n,m,Len,Ans=2e9,Dst[MAXN];bool b[MAXE],vis[MAXN];
struct Edge{int tot,lnk[MAXN],son[MAXE],nxt[MAXE],W[MAXE];void Clear(){memset(lnk,0,sizeof(lnk));tot=0;}void Add(int x,int y,int w){son[++tot]=y;W[tot]=w;nxt[tot]=lnk[x];lnk[x]=tot;}
}E;
struct xcw{int x,y,s,t;}a[MAXE];
#include<cctype>
struct HEAP{int x,p;bool operator <(const HEAP b)const{return x>b.x;}
};
priority_queue<HEAP> Heap;
int read(){int ret=0;char ch=getchar();bool f=1;for(;!isdigit(ch);ch=getchar()) f^=!(ch^'-');for(; isdigit(ch);ch=getchar()) ret=ret*10+ch-48;return f?ret:-ret;
}
void Build(int f){E.Clear();for(int i=1,j=1;i<=m;i++){if(a[i].x==1){if(b[j]^f) E.Add(a[i].x,a[i].y,a[i].s);else E.Add(a[i].y,a[i].x,a[i].t);j++;}else E.Add(a[i].x,a[i].y,a[i].s),E.Add(a[i].y,a[i].x,a[i].t);}
}
void Dijstar(){memset(Dst,63,sizeof(Dst));memset(vis,0,sizeof(vis));Dst[1]=0;Heap.push((HEAP){0,1});while(!Heap.empty()){int x=Heap.top().x,p=Heap.top().p;Heap.pop();if(vis[p]) continue;vis[p]=1;for(int j=E.lnk[p];j;j=E.nxt[j])if(Dst[E.son[j]]>Dst[p]+E.W[j]) Dst[E.son[j]]=Dst[p]+E.W[j],Heap.push((HEAP){Dst[E.son[j]],E.son[j]});}
}
int main(){//  freopen("4398.in","r",stdin);
//  freopen("4398.out","w",stdout);n=read(),m=read();for(int i=1;i<=m;i++){int x=read(),y=read(),s=read(),t=read();if(x>y) swap(x,y),swap(s,t);a[i]=(xcw){x,y,s,t};}for(int i=1;i<=m;i++) if(a[i].x==1) Len++;for(int p=0;(1<<p)<=Len;p++){for(int i=1;i<=Len;i++) b[i]=(i>>p)&1;Build(0);Dijstar();for(int i=1,j=1;i<=m;i++)if(a[i].x==1){if(!b[j]) Ans=min(Ans,Dst[a[i].y]+a[i].t);j++;}Build(1);Dijstar();for(int i=1,j=1;i<=m;i++)if(a[i].x==1){if( b[j]) Ans=min(Ans,Dst[a[i].y]+a[i].t);j++;}}if(Ans>=Dst[0]) printf("-1\n");else printf("%d\n",Ans);return 0;
}

BZOJ4398: 福慧双修【二进制分组+最短路】相关推荐

  1. bzoj 4398 福慧双修——二进制分组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4398 如果枚举1号点走哪些点出去,就从那些点出发跑多源最短路即可.最短路不会重复经过一条边. ...

  2. bzoj 4398 福慧双修 —— 二进制分组+多起点最短路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4398 按二进制每一位是 0/1 把 1 号点的儿子分成两组,分别作为起点和终点跑多起点最短路 ...

  3. 【技巧 二进制分组】bzoj4398: 福慧双修2407: 探险

    二进制分组也可以说是一种比较优美的拆贡献方式吧? Description 菩萨为行,福慧双修,智人得果,不忘其本. --唐朠立<大慈恩寺三藏法师传> 有才而知进退,福慧双修,这才难得. - ...

  4. 【BZOJ2069】ZAW(POI2004)-最短路+二进制分组

    测试地址:ZAW 题目大意: 给定一张边是双向的图,一条边走不同的方向可能代价不同,代价都非负,求从点111出发,不经过重复的点或边的最小回路.n≤5000,m≤10000n\le 5000,m\le ...

  5. [bzoj4398]福慧双修

    [bzoj4398]福慧双修 要求不能走重复的边,路径就是1->u->v->1,然后我们可以i想到一个暴力:把1去掉 枚举u跑最短路然后枚举v更新答案.因为边权非负,这个肯定是合法的 ...

  6. 【福慧双修-这是不是最短路?】

    ·题目:      如何福慧双修?被太后教导的甄嬛徘徊在御花园当中.突然,她发现御花园中的花朵全都是红色和蓝色的.她冥冥之中得到了响应:这就是指导她如何福慧双修的!现在御花园可以看作是有N块区域,M条 ...

  7. bzoj29894170数列——二进制分组+主席树

    题意的转化挺巧妙的 可以联想到曼哈顿距离! 并且,所谓的修改还要查询历史版本,并且修改之间不动只算一次,不就是给平面上加一个点吗? 看成(x,a[x])的点 就是一个菱形区域 转切比雪夫距离,变成矩形 ...

  8. 【BZOJ3821/UOJ46】玄学(二进制分组,线段树)

    [BZOJ3821/UOJ46]玄学(二进制分组,线段树) 题面 BZOJ UOJ 题解 呜,很好的题目啊QwQ. 离线做法大概可以线段树分治,或者直接点记录左右两次操作时的结果,两个除一下就可以直接 ...

  9. [bzoj4398] 福慧双修 最短路 二进制分组

    ---题面--- 题解: 考场上看的这道题,,,当时70分算法打挂了,今天才知道这个也是原题.... 首先,对于不跟1相邻的边,肯定不会经过两次,因为经过两次就回来了,除了增加路径长度之外没有任何意义 ...

最新文章

  1. 时间段为查询条件时的日期边界查询不到问题
  2. 翻译:集群索引:通往SQL Server索引级别3的阶梯
  3. springboot整合alibbaba-dubbo
  4. Android JNI使用方法
  5. UI帮手|小样机大作用
  6. 杀鸡儆猴!苹果撤销Facebook的iOS企业证书
  7. Unity与 DLL文件 ☀️| 怎样使用 C# 类库 生成一个DLL文件 并 调用!
  8. oracle odi 资料档案库访问期间出现未分类的异常错误,ODI11g调用DBLink时报ORA-28267: Invalid NameSpace Value错误...
  9. 为什么前端工程师的工资越来越高了?
  10. 弦截法及Python实现
  11. 合唱队形java_动态规划练习题-合唱队形
  12. 微博营销有什么优势与缺点?如何利用微博开展营销?
  13. 树莓派4B连接PCF8591模块
  14. 算法练习:Sequence II
  15. 数据结构算法常见的 100 道面试题全解析:2019 版
  16. mysql数据设置有效期_zabbix管理六之数据有效期设置
  17. 这几天以来寻找、分析单机CS数据的经验心得
  18. 流星雨直播:都市安魂新曲
  19. Android记事本
  20. 基于ssm量贩式ktv管理系统

热门文章

  1. 九部比《五十度灰》更血脉喷张的电影,个个看完都会让人欲罢不能!
  2. matlab 沙丁,基于三维空间关于海豚围捕沙丁鱼群的运动规律
  3. 解决js脚本加载失败的问题
  4. dnn降噪_可能是周杰伦粉丝必买好物?1MORE降噪圈铁蓝牙耳机PRO版体验
  5. 雄霸迈阿密java_罪恶都市3之雄霸迈阿密
  6. 从“中产梦”中醒来,好好打工吧
  7. 西南大学844信号与系统考研经验(高分上岸学姐)
  8. 苹果手机来电归属地_工信部:手机号归属地不会取消、否则增大诈骗风险-工信部,手机号,归属地,诈骗 ——快科技(驱动之家旗下媒体)-...
  9. IOS OC 多态(白话)
  10. Servlet快速筑基