JZOJ 5430 图
来源:互联网 发布:库里2017总决赛数据 编辑:程序博客网 时间:2024/06/10 22:16
图
Description
有一个
给出
接下来解释询问以及边的意义。
询问表示,一开始你在点
对于一条边(
询问如果要从
边和点的编号从
Data Constraint
Solution
离线,考虑分治。
假设当前在处理分治边区间[
显然从
总时间复杂度
Code
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,j,l) for(int i=j;i<=l;i++)#define fd(i,j,l) for(int i=j;i>=l;i--)using namespace std;typedef long long ll;const ll N=31,M=22e3,K=10*M,maxn=1e14;struct note{ int x,y,l,r;}t[M],qu[K];int ne[K],la[M],lb[K];ll dis[M][N][N],ans[K];int n,m,j,k,l,i,o,p,q;int read(){ int o=0; char ch=' '; for(;ch<'0'||ch>'9';ch=getchar()); for(;ch>='0'&&ch<='9';ch=getchar())o=o*10+ch-48; return o;}ll min(ll a,ll b){if(a<b)return a;else return b;}void divide(int l,int r,int op){ if(l==r){ fo(i,1,n)fo(j,1,n)dis[l][i][j]=maxn; int x=t[l].x,y=t[l].y; fo(j,1,n)dis[l][j][j]=t[l].r; dis[l][x][y]=dis[l][y][x]=t[l].l; for(int y=la[l];y;y=ne[y]){ int u=lb[y]; if(qu[u].r==l)ans[u]=dis[l][qu[u].x][qu[u].y]; } return; } int mid=(l+r)/2; divide(l,mid,0); divide(mid+1,r,1); fo(i,1,n)fo(j,1,n)dis[mid][i][j]=maxn; int x=t[mid].x,y=t[mid].y; dis[mid][x][y]=dis[mid][y][x]=t[mid].l; fo(j,1,n)dis[mid][j][j]=min(t[mid].r,dis[mid][j][j]); fd(i,mid-1,l){ int x=t[i].x,y=t[i].y; fo(j1,1,n)fo(j2,1,n)dis[i][j1][j2]=dis[i+1][j1][j2]+t[i].r; fo(j,1,n)dis[i][j][x]=min(dis[i+1][j][y]+t[i].l,dis[i][j][x]); fo(j,1,n)dis[i][j][y]=min(dis[i+1][j][x]+t[i].l,dis[i][j][y]); } fo(i,1,n)fo(j,1,n)dis[mid+1][i][j]=maxn; x=t[mid+1].x,y=t[mid+1].y; dis[mid+1][x][y]=dis[mid+1][y][x]=t[mid+1].l; fo(j,1,n)dis[mid+1][j][j]=min(t[mid+1].r,dis[mid+1][j][j]); fo(i,mid+2,r){ int x=t[i].x,y=t[i].y; fo(j1,1,n)fo(j2,1,n)dis[i][j1][j2]=dis[i-1][j1][j2]+t[i].r; fo(j,1,n)dis[i][j][x]=min(dis[i-1][j][y]+t[i].l,dis[i][j][x]); fo(j,1,n)dis[i][j][y]=min(dis[i-1][j][x]+t[i].l,dis[i][j][y]); } fo(i,l,mid){ for(int y=la[i];y;y=ne[y]){ int u=lb[y]; if(qu[u].r>mid&&qu[u].r<=r){ int xx=qu[u].x,yy=qu[u].y; int le=qu[u].l,ri=qu[u].r; ans[u]=maxn; fo(j,1,n)ans[u]=min(ans[u],dis[le][j][xx]+dis[ri][j][yy]); } } }}int main(){ cin>>n>>m>>q; fo(i,1,m)t[i].x=read(),t[i].y=read(),t[i].l=read(),t[i].r=read(); fo(i,1,q)qu[i].x=read(),qu[i].y=read(), qu[i].l=read(),qu[i].r=read(); fo(i,1,q)ne[++o]=la[qu[i].l],la[qu[i].l]=o,lb[o]=i; divide(1,m,1); fo(i,1,q)if(ans[i]>=maxn)puts("-1");else printf("%lld\n",ans[i]);}
阅读全文
1 0
- JZOJ 5430 图
- 【JZOJ 5430】 图
- 【JZOJ 5490】 图染色
- 【JZOJ 5430】【NOIP2017提高A组集训10.27】图
- JZOJ 5387【GDOI2018模拟9.23】动态图
- jzoj 3076. 【备战NOIP2012图论专项模拟试题】位图
- [jzoj]1345. 物流运输(图上DP)
- 电缆建设 jzoj 1405 二分图匹配 网络流
- JZOJ 100026. 【NOIP2017提高A组模拟7.7】图
- 【JZOJ 5239】 【GDOI2018模拟8.7】图的异或
- 【JZOJ 5433】【NOIP2017提高A组集训10.28】图
- JZOJ 5490. 【清华集训2017模拟11.28】图染色
- jzoj【NOIP2017提高A组集训10.28】图
- [JZOJ 3424] 粉刷匠 && [JZOJ 4254] 集体照
- [JZOJ 1280]最大匹配
- [JZOJ 1281]旅行
- [1282 JZOJ]资源勘探
- [JZOJ 1283]排序统计
- 欢迎使用CSDN-markdown编辑器
- ISP不经许可就能出售用户浏览记录?美国人民纷纷表示要用VPN
- 日本公司开发出转化率破纪录太阳能电池,转化效率26%+
- 程序执行概述
- 01:搭建第一个springboot项目
- JZOJ 5430 图
- 1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 递推+动归
- 数据结构(C++) 栈-迷宫问题
- 平衡二叉树的旋转
- CentOS下的history命令
- 四场纯技术干货分享,就是这么任性 | 硬创公开课预告
- 谷歌地图推出位置实时分享功能,注重用户隐私保护
- 摩拜“红包车”表面是烧钱 实际省了一笔巨额运营费
- 微信上线“微信指数”,进一步拓展微信生态