「JOISC 2018 Day 3」比太郎的聚会

题意:

​ 给你一个\(DAG\),若干组询问,每次给出一个终点和若干个点,问从给出点以外的点出发,到达终点的最长路。(\(|V|\leq 1e5 |E|\leq 1e6 \sum Y_i\leq 1e5\))

题解:

​ 一开始没看见最后那个条件,不会做。。。

​ 既然有那个\(\sum Y_i\leq 1e5\)就好办了,把\(Y_i\geq \sqrt{Q}\)的询问暴力\(O(n)\)DP。剩下的直接预处理。\(O((|V|+|E|)\sqrt{Q})\)完成。

(UPD:18.12.11 14:11 原来的代码是错的,之前交的时候loj还没有数据。至于错哪了:

if(y<=B) -> if(y<B)

出题人也是懂啊。。。。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<assert.h>
#define fo(i,l,r) for(int i=l;i<=r;i++)
#define of(i,l,r) for(int i=l;i>=r;i--)
#define fe(i,u) for(int i=head[u];i;i=e[i].next)
#define rfe(i,u) for(int i=h[u];i;i=e[i].next)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
inline void open(const char *s)
{#ifndef ONLINE_JUDGEchar str[20];sprintf(str,"%s.in",s);freopen(str,"r",stdin);sprintf(str,"%s.out",s);freopen(str,"w",stdout);#endif
}
inline int rd()
{static int x,f;x=0;f=1;char ch=getchar();for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';return f>0?x:-x;
}
const int N=100010,B=320;
struct edge{int v,next;edge(int v=0,int next=0):v(v),next(next){}
}e[N<<2];
int n,m,dis[N][321],st[N][321],d[N];
int tot=0,head[N],h[N];
int vis[N],used[N];inline void add(int u,int v)
{e[++tot]=edge(v,head[u]);head[u]=tot;e[++tot]=edge(u,h[v]);h[v]=tot;
}inline bool chk(int u,int t,int id)
{if(used[st[u][t]]!=id)return 0;return 1;
}inline void gao(int u)
{static int t1[321],t2[321];fe(i,u){int v=e[i].v;int j=0,k=0,tt=0;while(tt<B){while(j<B&&chk(u,j+1,i))++j;while(k<B&&chk(v,k+1,i))++k;if(dis[u][j+1]+1>dis[v][k+1]){t1[++tt]=dis[u][++j]+1;t2[tt]=st[u][j];used[t2[tt]]=i;}else{t1[++tt]=dis[v][++k];t2[tt]=st[v][k];used[t2[tt]]=i;}if(t2[tt]==v)break;}fo(j,1,tt)dis[v][j]=t1[j],st[v][j]=t2[j];}
}int main()
{open("hh");memset(dis,-0x3f,sizeof dis);n=rd();m=rd();int Q=rd();fo(i,1,m){int u=rd(),v=rd();add(u,v);assert(u<v);}fo(i,1,n)dis[i][1]=0,st[i][1]=i;fo(i,1,n)gao(i);while(Q){int x=rd(),y=rd();fo(i,1,y)vis[rd()]=Q;if(y<B){int ans=-1;fo(i,1,B)if(vis[st[x][i]]!=Q){if(!st[x][i])break;ans=dis[x][i];break;}printf("%d\n",ans);}else{int ans=-1;fo(i,1,x-1)d[i]=-1000000000;d[x]=0;of(u,x,1)rfe(i,u){int v=e[i].v;d[v]=max(d[v],d[u]+1);}fo(i,1,x)if(vis[i]!=Q)ans=max(ans,d[i]);printf("%d\n",ans);}--Q;}return 0;
}

转载于:https://www.cnblogs.com/JackyhhJuRuo/p/10095398.html

「JOISC 2018 Day 3」比太郎的聚会相关推荐

  1. LOJ #2838. 「JOISC 2018 Day 3」比太郎的聚会 根号分治

    这道题的数据范围中有两个需要注意到的点: 1. 边都是由编号小的点连向编号大的点. 2. 总点数只有 $10^5$ 个. 所以我们可以考虑采取根号分治的做法: 对于点数大于 $\sqrt n$ 的部分 ...

  2. [LOJ]#2838. 「JOISC 2018 Day 3」比太郎的聚会 根号分治

    Solution 以后不会做题还是要考虑根号分治啊-- 对于给出点数≥n\ge\sqrt n≥n​,直接O(n)O(n)O(n)DP: 对于给出点数<n<\sqrt n<n​,可以预 ...

  3. LOJ#2833 「JOISC 2018 Day 1」帐篷 dp

    题目描述 译自 JOISC 2018 Day1 T3「テント / Tents」 JOI 君经营着一座露营地.露营地被划分为 H 行 W 列的矩阵,各行平行于东西方向,而各列平行于南北方向.从北向南数第 ...

  4. @loj - 6353@「CodePlus 2018 4 月赛」组合数问题 2

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 请你找到 k 个不同的组合数,使得对于其中任何一个组合数 \(C ...

  5. loj6300 「CodePlus 2018 3 月赛」博弈论与概率统计

    link 题意: A和B玩游戏,每轮A赢的概率为p.现在有T组询问,已知A赢了n轮输了m轮,没有平局,赢一局A得分+1,输一局得分-1,问A得分期望值? $n+m,T\leq 2.5\times 10 ...

  6. 【LibreOJ】#6299. 「CodePlus 2018 3 月赛」白金元首与克劳德斯

    [题意]给出坐标系中n个矩形,类型1的矩形每单位时间向x轴正方向移动1个单位,类型2的矩形向y轴正方向,初始矩形不重叠,一个点被矩形覆盖当且仅当它在矩形内部(不含边界),求$(-\infty ,+\i ...

  7. 「JOISC 2016 Day 3」回转寿司

    https://loj.ac/problem/2736 题解 挺有意思的题. 考虑这种操作不好直接维护,还有时限比较长,所以考虑分块. 考虑一个操作对整个块的影响,无非就是可能把最大的拿走,再把新的元 ...

  8. 【题解】「JOISC 2016 Day 3」回转寿司

    想一下传送带 (233) 我记得我和 lh 说了可以对于一个整块把一堆操作放在一起处理 暴力匹配是 O(nq)O(nq)O(nq) 的. 但是如果加一个优先队列呢? 那你就可以在 O(BlogQi)O ...

  9. [LOJ2838][JOISC 2018 Day 3]比太郎的聚会(分块暴力)

    题意   给定一张nnn个点mmm条边的DAG,保证所有边都是从编号小的点往编号大的点连,给qqq次询问,每次询问给出一个点和一个点集,点集大小为kkk,询问对于可达这个点的除该点集外的最大距离是多少 ...

最新文章

  1. 一.Timesten安装
  2. 有序数组求中位数问题
  3. 请定义一个宏,比较两个数的a、b的大小,不能使用大于、小于、if语句
  4. 下载早期版本的JDK
  5. warning:setlocale:LC_CTYPE:cannot change locale
  6. Svn服务器之必须提交更改日志篇
  7. 判断web app是否从主屏启动
  8. PHPMailer如何获取QQ邮箱授权码
  9. 适用于Android的最佳笔记应用程序以及如何制作自己的应用程序
  10. 通达OA v12流程中心
  11. 东大成贤c语言试卷,香气四溢的东大成贤
  12. “百度有啊”可以访问了,大家预测一把其前景如何?
  13. 【数据分析与挖掘】数据分析学习及跟课学习 | csdn_Part 02 数据结构基础
  14. Go 语言 入门 基于 GoLand 2023.1 创建第一个Go程序
  15. 2022-2028年中国滚动轴承行业市场发展规模及投资机会分析报告
  16. Taurus_Linux
  17. 《Java 后端面试经》Java 基础篇
  18. 太原理工大学计算机院招生网,相洁-太原理工大学信息与计算机学院
  19. [mysql语法错误]--Cannot load connection class because of underlying exception
  20. matlab蒙特卡洛计算报童,马尔可夫链蒙特卡罗模拟(MCMC)-基于MATLAB操作

热门文章

  1. 戴尔电脑cpu温度过高怎么办
  2. Bug的由来,Bug为什么叫做Bug
  3. ceph-deploy 添加/删除 mon节点
  4. 一个IO口控制多个按键方法
  5. 内存屏障与java的内存屏障 —— JVM篇
  6. android studio 导入工程问题总结
  7. 【企业管理】72套初创公司创业团队股权分配方案
  8. 清理招投标不合理限制,电子招投标系统怎么遏制围串标行为?
  9. 给小学生科普计算机知识竞赛,小学生科普知识竞赛PPT.ppt
  10. 【人物】一个程序员决定写代码到60岁