其实是个傻逼题但是我太傻逼了然后就错了无数遍总算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 地铁涨价 图论的更多相关文章

  1. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  2. 洛谷 P1710 地铁涨价

    题目背景 本题开O2优化,请注意常数 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地 ...

  3. 洛谷P1710地铁涨价

    题目背景 本题开O2优化,请注意常数 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地 ...

  4. 洛谷2583 地铁间谍 (UVa1025A Spy in the Metro)

    洛谷2583 地铁间谍(UVa1025A Spy in the Metro) 本题地址:http://www.luogu.org/problem/show?pid=2583 题目描述 特工玛利亚被送到 ...

  5. 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 ...

  6. P1710 地铁涨价

    题目背景 本题开O2优化,请注意常数 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地 ...

  7. 洛谷P1613 跑路 图论

    正解:倍增+图论 解题报告: 传送门! 话说这题是真滴很妙啊,,,大概港下QwQ 首先看懂这道题,它是说,只要是1<<k的都能1s跑过,而且每条边的长度都是1,就是说一秒可以跑过1< ...

  8. 洛谷P2047 [NOI2007]社交网络 [图论,最短路计数]

    题目传送门 社交网络 题目描述 在社交网络(social network)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题.在一个社交圈子里有n个人,人与人之间有不同程度的关系. ...

  9. 洛谷P2583 地铁间谍

    P2583 地铁间谍 题目描述 特工玛利亚被送到S市执行一个特别危险的任务.她需要利用地铁完成他的任务,S市的地铁只有一条线路运行,所以并不复杂. 玛利亚有一个任务,现在的时间为0,她要从第一个站出发 ...

随机推荐

  1. Ubuntu图形界面和字符界面转换、指定默认启动界面

    1.按ALT+CTRL+F1.F2.F3.F4.F5.F6.F7可来回切换7个界面(Linux实体机)      其中ALT+CTRL+F7可切换到图形界面(Linux实体机)        如果是V ...

  2. 客户端远程连接linux下mysql数据库授权

    mysql默认状态是只支持localhost连接,这样远程服务器都输入IP地址去连接你的服务器是不可以的,下面我来介绍怎么让mysql允许远程连接配置方法,有需要的朋友可参考.   方法一,直接利用p ...

  3. linux下命令学习

    1 在linux中,./代表当前目录下 例如 创建一个文件夹123   mkdir ./123   ->当前目录下创建一个123文件夹 mkdir -p ./123/456  在当前目录下创建一 ...

  4. Android学习之适配器SimpleCursorAdapter

    三.   SimpleCursorAdapter与SimpleAdapter用法相近.只是将List对象换成了Cursor对象.而且SimpleCursorAdapter类构造方法的第四个参数from ...

  5. JS笔记 - JQ事件委托( 适用于给动态生成的脚本元素添加事件)

    最近一段时间打了一个大仗,现在总算消停点,才有时间来做个总结吧算是: 移动端遇到一个项目,是一个列表的侧滑栏,在我这里用jq写的交互事件.自测各方面都挺好的,美滋滋的给了研发.研发也美滋滋的开始开发. ...

  6. 二叉树的实现(Java语言描述)

    实现二叉树   并先序遍历之. package 二叉树的实现; public class BinaryTree<T> { class Node { int value; // 该节点存储的 ...

  7. python的高级特性:切片,迭代,列表生成式,生成器,迭代器

    python的高级特性:切片,迭代,列表生成式,生成器,迭代器 #演示切片 k="abcdefghijklmnopqrstuvwxyz" #取前5个元素 k[0:5] k[:5] ...

  8. 安卓APP动态调试-IDA实用攻略

    0x00 前言 随着智能手机的普及,移动APP已经贯穿到人们生活的各个领域.越来越多的人甚至已经对这些APP应用产生了依赖,包括手机QQ.游戏.导航地图.微博.微信.手机支付等等,尤其2015年春节期 ...

  9. sencha touch 2.2.1 自定义彩色图标按钮(button+ico)

    sencha touch 2.2.1 这个版本使用了新的按钮模式,不过他只提供了少部分的按钮样式.我们可以加一些自定义的ico样式 新加ico样式lower .x-button .x-button-i ...

  10. 计算机从加电到系统(Linux)启动完成

    0x0 背景 在我参加的面试和我面试别人.或者参加别人对别人的面试的事后经常遇到的一个问题就是:请从计算机加电开始描述一下计算机启动到操作系统正式启动起来的全过程.这是一个考验对计算机体系结构和基本知 ...