洛谷P1710 地铁涨价 图论
其实是个傻逼题但是我太傻逼了然后就错了无数遍总算A了 觉得不写个题解真是亏了
其实是 之前想了个超时想法 然后还自以为很对?后来看了题解发现还是比较妙的哦 于是就想着那还是发个题解记录下趴quq
正解:图论
解题报告:
首先总结下这类删边题目的常见套路?就是 离线做,倒着加边(之前翻讨论说好像在线也能A掉?有点强哦qwq想着过段时间去看下趴qwq
然后这个题目,我先港下我最开始想到的傻逼超时想法趴
就是,每次加边我就判断能否改变,如果能改变就改变啊,然后就f++啊,如果之前改过f了后面又改那肯定前面的就不作数了(因为我是倒着加边嘛,前面其实相当于是后来的,就是说 如果你开始就不满了,后来满不满就都一样了,反正不会对答案造成贡献了咯
然后狂写一通
0分 ummm是因为犯了些傻逼错误后面会港的
发现傻逼错误之后又改了一下,最后是T了俩点,80
放下代码趴纪念下我逝去的仨小时...
#include<bits/stdc++.h> using namespace std; #define ll long long #define rp(i,x,y) for(register ll i=x;i<=y;++i) #define my(i,x,y) for(register ll i=x;i>=y;--i) #define P pair<ll,ll> #define mp make_pair ll n,m,q,head[+],a[+],b[+],r[+],tot,dis[+],f[+],ans,QAQ[+]; +],vis[+]; ]; priority_queue< P,vector< P >,greater< P > >Q; inline ll read() { ;; '))ch=getchar(); ; )+(x<<)+(ch^'),ch=getchar(); return y?x:-x; } inline void add(ll x,ll y){edge[++tot].to=x;edge[tot].next=head[y];head[y]=tot;} inline void dij() { memset(dis,/,,));vis[]=;dis[]=; while(!Q.empty()) { ll t=Q.top().second;Q.pop(); ;i=edge[i].next) ){dis[edge[i].to]=dis[t]+;,edge[i].to)),vis[edge[i].to]=;} } } inline void update(ll u,ll tim) { memset(vis,,;)f[QAQ[u]]--;QAQ[u]=tim; while(!Q.empty()) { ll t=Q.top().second;Q.pop(); ;i=edge[i].next) ) { ans++;)f[QAQ[edge[i].to]]--;QAQ[edge[i].to]=tim;dis[edge[i].to]=dis[t]+; ,edge[i].to)),vis[edge[i].to]=; } } } int main() { n=read();m=read();q=read(); rp(i,,m)a[i]=read(),b[i]=read(); rp(i,,q)r[q-i+]=read(),lq[r[q-i+]]=; rp(i,,m))add(a[i],b[i]),add(b[i],a[i]); dij(); rp(i,,q) { add(a[r[i]],b[r[i]]);add(b[r[i]],a[r[i]]); ) { ans=; ,update(a[r[i]],i); ,update(b[r[i]],i); f[i]+=ans; } } my(i,q,)f[i-]+=f[i]; my(i,q,)printf("%lld\n",f[i]); ; }
删删改改3h最后T了的傻逼代码QAQ
然后正解其实还挺好理解的,就是其实我的想法比较接近正解了?但是我的这个太麻烦了嘛,我其实并不需要能改变就改变,而是能改成最短路的时候再改变这样就可以一步到位不需要再搞些改变f之类的傻逼操作
好的那就这样我还是觉得比较好理解应该已经讲通了?
代码:
#include<bits/stdc++.h> using namespace std; #define ll int #define rp(i,x,y) for(register ll i=x;i<=y;++i) #define my(i,x,y) for(register ll i=x;i>=y;--i) #define P pair<ll,ll> #define mp make_pair +; ll n,m,q,head[M],a[M],b[M],r[M],tot,dis1[M],dis2[M],ans,f[M]; bool lq[M],vis[M]; ]; priority_queue< P,vector< P >,greater< P > >Q; inline ll read() { ;; '))ch=getchar(); ; )+(x<<)+(ch^'),ch=getchar(); return y?x:-x; } inline void add(ll x,ll y){edge[++tot].to=x;edge[tot].next=head[y];head[y]=tot;} inline void dij1() { memset(dis1,/,,));vis[]=;dis1[]=; while(!Q.empty()) { ll t=Q.top().second;Q.pop(); ;i=edge[i].next) ){dis1[edge[i].to]=dis1[t]+;,edge[i].to)),vis[edge[i].to]=;} } } inline void dij2() { memset(dis2,/,,));vis[]=;dis2[]=; while(!Q.empty()) { ll t=Q.top().second;Q.pop(); ;i=edge[i].next) ){dis2[edge[i].to]=dis2[t]+;,edge[i].to)),vis[edge[i].to]=;} } } inline void update(ll u) { ;i=edge[i].next) && dis1[edge[i].to]!=dis2[edge[i].to]){ans++;dis2[edge[i].to]=dis1[u]+;update(edge[i].to);} } int main() { n=read();m=read();q=read(); rp(i,,m)a[i]=read(),b[i]=read(),add(a[i],b[i]),add(b[i],a[i]); dij1(); rp(i,,q)r[q-i+]=read(),lq[r[q-i+]]=; memset(vis,,,,tot)edge[i].to=edge[i].next=;tot=; rp(i,,m))add(a[i],b[i]),add(b[i],a[i]); dij2(); rp(i,,q) { add(a[r[i]],b[r[i]]);add(b[r[i]],a[r[i]]); ==dis1[a[r[i]]] ) { ans=;dis2[a[r[i]]] = dis1[a[r[i]]];update(a[r[i]]);f[i]=ans; }//如果 b已经是最短路上a不是且可以更新 ==dis1[b[r[i]]] ) { ans=;dis2[b[r[i]]] = dis1[b[r[i]]];update(b[r[i]]);f[i]=ans; }//反之亦然咯 } my(i,q,)f[i-]+=f[i]; my(i,q,)printf("%d\n",f[i]); ; }
然后真的忍不住吐槽一下...这辣鸡题目...我实打实搞了应该有5h?我都快疯了...
我,先是加边加成单向,0了4次
然后计算答案的时候是从n算到1而不是从q算到1,70了3次
然后尝试开大空间MLE了,20了2次
然后又去调之前的方法TLE了,80了一次
...有点心酸,最近是不是运气不太好QAQ
洛谷P1710 地铁涨价 图论的更多相关文章
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
- 洛谷 P1710 地铁涨价
题目背景 本题开O2优化,请注意常数 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地 ...
- 洛谷P1710地铁涨价
题目背景 本题开O2优化,请注意常数 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地 ...
- 洛谷2583 地铁间谍 (UVa1025A Spy in the Metro)
洛谷2583 地铁间谍(UVa1025A Spy in the Metro) 本题地址:http://www.luogu.org/problem/show?pid=2583 题目描述 特工玛利亚被送到 ...
- uva A Spy in the Metro(洛谷 P2583 地铁间谍)
A Spy in the Metro Secret agent Maria was sent to Algorithms City to carry out an especially dangero ...
- P1710 地铁涨价
题目背景 本题开O2优化,请注意常数 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地 ...
- 洛谷P1613 跑路 图论
正解:倍增+图论 解题报告: 传送门! 话说这题是真滴很妙啊,,,大概港下QwQ 首先看懂这道题,它是说,只要是1<<k的都能1s跑过,而且每条边的长度都是1,就是说一秒可以跑过1< ...
- 洛谷P2047 [NOI2007]社交网络 [图论,最短路计数]
题目传送门 社交网络 题目描述 在社交网络(social network)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题.在一个社交圈子里有n个人,人与人之间有不同程度的关系. ...
- 洛谷P2583 地铁间谍
P2583 地铁间谍 题目描述 特工玛利亚被送到S市执行一个特别危险的任务.她需要利用地铁完成他的任务,S市的地铁只有一条线路运行,所以并不复杂. 玛利亚有一个任务,现在的时间为0,她要从第一个站出发 ...
随机推荐
- WP8.1学习系列(第二十五章)——控件样式
XAML 框架提供许多自定义应用外观的方法.通过样式可以设置控件属性,并重复使用这些设置,以便保持多个控件具有一致的外观. 路线图: 本主题与其他主题有何关联?请参阅: 使用 C# 或 Visua ...
- 【IOS】iOS 企业版应用网站下载plist文件
如果想从自己公司的网站上下载安装应用,首先 准备一个 index.html文件 <!DOCTYPE html> <html lang="zh-cn"> &l ...
- 【docker】使用docker 安装 宝塔面板
拉取centos基础镜像,用容器启动该基础镜像,直接在这个容器中部署 1 拉取纯净系统镜像 docker pull centos: 2 启动镜像,映射主机与容器内8888端口 docker run - ...
- JavaScript 中的 Map
很多编程语言中都有类似Map这种 键-值对 的数据结构. 可惜,JavaScript没有. 幸运的是,可以自己构建一个Map对象. 对象的定义 <script type="text/j ...
- Maven —— scope 元素的值及其含义
1.compile 缺省值,所属依赖在所有的classpath中可用,同时它们也会被打包(随着项目一起发布). 2.provided 只有当JDK或者某个容器已提供该依赖之后才使用.如servlet. ...
- jquery-json 插件使用方法
var thing = { plugin: 'jquery-json', version: 2.4 }; var encoded = $.toJSON( thing ); // '{"plu ...
- C# 中对COOKIES的操作
HttpUtility.UrlDecode HttpUtility.UrlEncode HttpContext.Current.Request.Cookies["UserCode" ...
- About LOCAL_PRIVATE_PLATFORM_APIS in Android.mk
LOCAL_PRIVATE_PLATFORM_APIS := true设置后,会使用sdk的hide的api來编译 在Android.mk中如果有LOCAL_SDK_VERSION 这个编译配置,就会 ...
- Linux命令 dmesg:分析内核产生的信息
案例一 输出所有的内核开机时的信息 zh@zh:~$dmesg | more 案例二 查找开机的时候硬盘的相关信息
- 父窗口 和 iframe 互相访问
在父窗口中获取iframe中的元素 1. 格式:window.frames["iframe的name值"].document.getElementByIdx_x("ifr ...