洛谷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,她要从第一个站出发 ...
随机推荐
- 【RF库XML测试】Get Elements
Name:Get ElementsSource:XML <test library>Arguments:[ source | xpath ]Returns a list of elemen ...
- IIS URL Rewrite – Installation and Use
IIS URL Rewrite – Installation and Use Posted by Nick LeFevre | Leave a reply IIS URL Rewrite Instal ...
- Explaining Delegates in C# - Part 6 (Asynchronous Callback - Way 3)
By now, I have shown the following usages of delegates... Callback and Multicast delegatesEventsOne ...
- Git 学习笔记--Git下的冲突解决
冲突的产生 很多命令都可能出现冲突,但从根本上来讲,都是merge 和 patch(应用补丁)时产生冲突. 而rebase就是重新设置基准,然后应用补丁的过程,所以也会冲突. git pull会自动m ...
- java多线程例子(生成者和消费者)
Info.cs 商品 public class Info { boolean flag=false; private String name="张三"; private int a ...
- IDEA 单元测试 导入JUnit4到项目
一.IDEA自带JUnit4的jar包,现在让我们来导入. Step 1. IDEA最上面一栏的菜单栏中,选File->Project Structure(从上往下第11个),弹出窗口左边有一个 ...
- Mysql错误:Duplicate entry '127' for key 'PRIMARY'的解决方法
有时候真是挺幸运,正当我自以为是地认为掌握了某个知识点的时候,现实就会马上出现另外一个问题,让我知道之前的认知是不全面的. 正如我上篇博文中所述,如果一个自增字段达到了上限,而且继续向里面插入数据的话 ...
- bootstrap 中这段代码 使bundles 失败
_:-ms-fullscreen, :root input[type="date"], _:-ms-fullscreen, :root input[type="time& ...
- axure rp ----专业的快速原型设计工具
Axure RPAxure的发音是』Ack-sure』,RP则是』Rapid Prototyping』快速原型的缩写.Axure RP Pro是美国Axure Software Solution公司的 ...
- vue项目打包之后页面空白解决办法
之前项目遇到个情况,npm run build打包之后上传到服务器后,index.html打开一片空白,资源都加载了,但是就是不显示. 然后百度找了原因,修改了两处地方 一.修改 assetsPubl ...