洛谷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,她要从第一个站出发 ...
随机推荐
- SaltStack 批量分发文件
这里演示如何将 salt-master 上的文件批量分发到多台 salt-minion,步骤如下: [root@localhost ~]$ cat /srv/salt/top.sls # 先定义入口配 ...
- nodeJs学习过程之认识nodejs
nodeJs只是听说过,没见过,没玩过.从新手开始,我想慢慢掌握它. 一.首先,我想知道nodeJs是什么? 摘自百度百科: Node.js是一套用来编写高性能网络服务器的JavaScript工具包, ...
- JSP基本用法(一)运行机制和语法
一.概述 JSP是一种建立在Servlet规范功能上的动态网页技术,在网页文件中嵌入Java代码和JSP标记用于产生动态内容. 本文简单介绍JSP的运行机制和JSP的语法. 二.JSP的运行机制 JS ...
- 【LeetCode OJ】Swap Nodes in Pairs
题目:Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2 ...
- Linux 排错 误删 /etc/fstab 和 /boot怎样恢复
实验:在分区情况下,rm -rf /boot和/etc/fstab,恢复 首先我们查看一下/etc/fstab 里面放的是什么东西,从下图可以看出里面存放的是分区的挂载情况,删除分区将不能自动挂载 接 ...
- mysql 创建merge表方便查询
SELECT COUNT(*) FROM `comment` SHOW CREATE TABLE `comment` CREATE TABLE `comment1` ( `id` ) NOT NULL ...
- 禁用Visual Studio 2013的Browser Link功能 -调试不断请求http://localhost:6154/c4ad1c693ebf428283832eaa827f9c6e/arterySignalR/poll?transport=longPolling...
关于禁用查到的解决: 作者:donny945 https://my.oschina.net/ind/blog/359003 今天浏览器调试代码的时候,一直出现以下的请求,导致需要看的请求都被淹没了,之 ...
- thinkphp5.0 实现单文件上传功能
思路是:在app/ceshi/fire下面有一个index操作方法来渲染显示前端文件,然后前端文件跳转到upload操作方法进行处理,成功显示"文件上传成功",失败显示错误. 首先 ...
- ATM技术基本原理
1 术语.定义和缩略语 1.1 术语.定义 术语/定义 说 明 ATM层 位于B-ISDN/ATM网络协议参考模型的第二层,完成交换.路由选择和信元复用功能.ATM层的基本处理单位是信元. AA ...
- DRM in Android详解--转
DRM,英文全称为Digital Rights Management,译为数字版权管理.它是目前业界使用非常广泛的一种数字内容版权保护技术.随着知识产权保护受重视的程度日益提高,快速攻城略地得Andr ...