题目链接:点击查看

题目大意:给出一个区间,初始时为 [ 1 , n ] ,每次操作可以将 [ l , r ] 变为下面的其中之一:

  1. [ l + 1 , r ]
  2. [ l , r - 1 ]
  3. [ l - 1 , r ]
  4. [ l , r + 1 ]

现在给出 m 次限制,表示可以花费一定的代价,使得上述的前两种或者后两种变化无效,问是否可以通过一些限制,使得永远无法达到 l == r 的状态

题目分析:设源点为点 ( 1 , n ) ,所有的 l == r 的点与汇点相连,不难看出,对于此图求最大流最小割显然是正确答案

因为点数较多,所以考虑转换为对偶图优化,此类问题可以参考:狼抓兔子

转换为对偶图后,直接跑最短路就是答案了,记得开 long long ,我的建图方法如下:

其中:浅蓝色代表原来的点,红色代表原来的边(不属于 m 条边中的其他边都赋值为 inf 即可),深蓝色的为对偶图的点,紫色的为对偶图的边

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const LL inf=0x3f3f3f3f3f3f3f3f;const int N=3e5+100;//顶点数 const int M=N*8;//边数 struct Edge
{int to,next;LL w;
}edge[M];int head[N],cnt,n,m,id[510][510];//链式前向星LL d[N],L[510][510],R[510][510]; bool vis[N];void addedge(int u,int v,LL w)
{edge[cnt].to=v;edge[cnt].w=w;edge[cnt].next=head[u];head[u]=cnt++;edge[cnt].to=u;edge[cnt].w=w;edge[cnt].next=head[v];head[v]=cnt++;
}struct Node
{int to;LL w;Node(int TO,LL W){to=TO;w=W;}bool operator<(const Node& a)const{return w>a.w;}
};void Dijkstra(int st)
{priority_queue<Node>q;memset(vis,false,sizeof(vis));memset(d,0x3f,sizeof(d));d[st]=0;q.push(Node(st,0));while(q.size()){Node cur=q.top();int u=cur.to;q.pop();if(vis[u])continue;vis[u]=true;for(int i=head[u];i!=-1;i=edge[i].next)//扫描出所有边 {int v=edge[i].to;LL w=edge[i].w;if(d[v]>d[u]+w)//更新 {d[v]=d[u]+w;q.push(Node(v,d[v]));}}}
}void init()
{memset(head,-1,sizeof(head));cnt=0;int tot=0;for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++){id[i][j]=++tot;L[i][j]=R[i][j]=inf;}
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);scanf("%d%d",&n,&m);init();int st=N-1,ed=st-1;while(m--){int l,r,w;char op[5];scanf("%d%d%s%d",&l,&r,op,&w);if(op[0]=='L')L[l][r]=w;elseR[l][r]=w;}for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++){if(i==1)addedge(st,id[i][j],R[i][j]);elseaddedge(id[i-1][j],id[i][j],R[i][j]);if(j==n)addedge(id[i][j],ed,L[i][j]);elseaddedge(id[i][j+1],id[i][j],L[i][j]);}Dijkstra(st);if(d[ed]==inf)puts("-1");elseprintf("%lld\n",d[ed]);return 0;
}

牛客多校2 - Interval(网格图最大流转换为对偶图最短路)相关推荐

  1. 洛谷 - P4001 [ICPC-Beijing 2006]狼抓兔子(网格图最大流转换为对偶图最短路)

    题目链接:点击查看 题目大意:给出一张 n * m 的稠密图,求以点 ( 1 , 1 ) 为起点,点 ( n , m ) 为终点的最小割 题目分析:n 和 m 都是 1e3 级别的,最多可能有 1e6 ...

  2. 牛客多校5 - Interval(主席树)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a ,规定函数 f( l , r ) = a[ l ] & a[ l + 1 ] & ... & a[ r ] ,在规 ...

  3. 牛客多校 - Minimum-cost Flow(最小费用最大流+贪心)

    题目链接:点击查看 题目大意:给出一张有向图,每条边都有单独的花费,现在给出 q 次询问,每次询问给出一个 u 和 v 需要回答:将所有边的流量都设置为 u / v 后,从点 1 到点 n 流量为 1 ...

  4. python字符串去重及排序 牛客_2018牛客多校第一场 D.Two Graphs

    题意: n个点,m1条边的图E1,n个点,m2条边的图E2.求图E2有多少子图跟图E1同构. 题解: 用STL的全排列函数next_permutation()枚举映射.对于每一种映射枚举每一条边判断合 ...

  5. 【2020暑假牛客多校(一)】

    牛客多校 Home AC:2,rank517AC : 2, rank517AC:2,rank517 7.127.127.12 题单 F(1271/5027)F(1271/5027)F(1271/502 ...

  6. 2020 牛客多校第一场

    2020 牛客多校第一场 A. B-Suffix Array 后缀数组的思想:倍增+桶排序的方式找出一串连续序列后缀的大小.虽说正常使用的时候都是字典序,但是只要修改排序方式,也能够达到一个类似的&q ...

  7. 牛客多校第二场补题(继续罚坐)

    牛客多校第二场(继续罚坐场) Draw Grids ZYT和LBC玩游戏,在4*4的矩阵中,从起点开始,每个人只能连一条直线,且只能在起点或者上一个人的终点位置连上这个位置相邻的一条直线,并且不能形成 ...

  8. 牛客多校三 B Black and white

    牛客多校三 B Black and white 在n*m的棋盘上,每个格子有一个数,初始可以选一定的格子标记为黑色,在任意四个形如(i1, j1)(i1, j2)(i2, j1)(i2, j2)的格子 ...

  9. 2019牛客多校第一场

    2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...

最新文章

  1. 【RecyclerView】 十二、RecyclerView 数据更新 ( 修改单条数据 | 批量修改数据 )
  2. Linux 工程向 Windows 平台迁移的一些小小 tips
  3. kodi 更改服务器文件,云服务器安装kodi
  4. 【转】DevOps到底是什么意思?
  5. 计算机图形学基础教程论文,计算机图形学小论文
  6. rj45管脚定义_rj45接口定义,rj45插座引脚定义
  7. oracle异步sql,Linux上Oracle是否使用异步io的诊断
  8. python课程网课-有没有简单易懂的入门级Python辅导书或网络课程?
  9. 苹果手机型号对应表及尺寸
  10. 深夜不睡的我爬取一下美女照片!!!哈哈!!来吧,刺激磁刺激!!!
  11. 关于si4438以往犯的一些错误
  12. mysql服务启动中但总是闪退_MySql闪退和服务无法启动的解决方法
  13. cass简码大全_南方cass简码完整版
  14. VB长度宽度高度单位,width,scaleWidth,Height,scaleHeight,scaleMode
  15. 硬件电路学习之开尔文电桥双臂讲解
  16. M1芯片安装CleanMyMac X4.7.4的方法(附下载)M1芯片安装那个CleanMyMac X版本?CleanMyMac X已完美支持M1芯片安装 支持big sur系统
  17. android手机 hdmi,手机的高清输出——MHL和micro HDMI测试
  18. 关于达芬奇调色台的那些事儿
  19. word或excel图片没有另存为怎么办
  20. 为什么打开wps文字背景是绿色的?怎么变成白色的呢?

热门文章

  1. 网页上点击java没反应_JavaScript_javascript:void(0)点击登录没反应怎么解决,巧用批处理解决IE不支持JavaScri - phpStudy...
  2. java设计模式建造_java设计模式-建造者模式
  3. 认证(登录)功能需求分析
  4. 使用Docker-镜像命令
  5. Nginx中Gzip压缩功能的实例配置
  6. zookeeper的名词复盘-集群角色
  7. ReentrantLock重入锁
  8. MyBatis 编程式开发中的核心对象及其作用?
  9. Spring-Cloud中的 熔断、限流、降级
  10. 防盗链技术底层实现原理分析