TYVJ P1577 泥泞的道路
题目链接:http://www.tyvj.cn/p/1577#
描述
输入格式
随后m行每行三个正整数x、y、w,用来描述一条道路,它连接x和y景点并且泥泞程度为w。
随后Q行,每行四个参数p1、p2、q1、q2,含义如下:
设数列Si表示你求得的第i个询问的结果(s0=1),则对于第i个询问:
X=(Si-1+p1)*p2 mod n + 1;
Y=(si-1+q1)*q2 mod n + 1;
输出格式
测试样例1
输入
4 4
1 2 2
2 3 1
1 3 3
3 4 5
2
3 1 0 2
1 1 2 1
输出
2
5
说明:第一个询问是{x=1,y=3},第二个询问是{x=4,y=1}。
备注
对于30%的数据,n<=1000,m<=3000,Q<=1000;
对于100%的数据,n<=100000,m<=300000,Q<=100000;
对于100%的数据,0<=p1、p2、q1、q2<n,w<300000。
在线问。两点之间的边的最大值最小。
先MST构造一棵树。
然后LCA询问,可是这道题爆栈,加栈也没用,还有这种LCA也第一次写,WA不少。
DFS变成BFS应该可以A了
1 #pragma comment(linker, "/STACK:1024000000,1024000000")
2 #include<iostream>
3 #include<algorithm>
4 #include<cmath>
5 #include<string.h>
6 #include<vector>
7 #include<stdio.h>
8
9
10 using namespace std;
11 #define N 623456
12 struct node
13 {
14 int x,y,z;
15 }a[N];
16
17 int f[N];
18
19 int find(int x)
20 {
21 if (f[x]!=x) f[x]=find(f[x]);
22 return f[x];
23 }
24
25 struct nod
26 {
27 int v,c,next;
28 }e[N<<];
29 int head[N],tot;
30
31 int cmp(node a,node b)
32 {
33 return a.z<b.z;
34 }
35
36 void add(int u,int v,int z)
37 {
38 e[tot].v=v;
39 e[tot].c=z;
40 e[tot].next=head[u];
41 head[u]=tot++;
42 }
43 int dp[N][],dep[N];
44 int dpmax[N][];
45
46 void dfs(int u,int fa,int t,int z)
47 {
48 dp[u][]=fa;
49 dpmax[u][]=z;
50 dep[u]=t;
51 for (int i=head[u];i!=-;i=e[i].next)
52 {
53 int v=e[i].v;
54 if (v==fa) continue;
55 //dpmax[v][0]=e[i].c;
56 dfs(v,u,t+,e[i].c);
57 }
58 }
59
60 int lca(int u,int v)
61 {
62 if (dep[u]<dep[v]) swap(u,v);
63 int dif=dep[u]-dep[v];
64
65 int res=;
66 for (int i=;i<;i++)
67 if ((dif>>i)&) res=max(res,dpmax[u][i]),u=dp[u][i];
68
69 if (u==v) return res;
70 for (int i=;i>=;i--)
71 if (dp[u][i]!=dp[v][i]) {
72 res=max(res,dpmax[u][i]),
73 res=max(res,dpmax[v][i]);
74 u=dp[u][i],v=dp[v][i];
75 }
76 if (u!=v) res=max(res,dpmax[u][]),res=max(res,dpmax[v][]);
77 return res;
78 }
79 inline int read()
80 {
81 int x=,f=;char ch=getchar();
82 while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
83 while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
84 return x*f;
85 }
86 int main()
87 {
88 int n,m;
89 // freopen("input.txt","r",stdin);
90 memset(head,-,sizeof(head));
91 tot=;
92 // scanf("%d%d",&n,&m);
93 n=read();
94 m=read();
95 for (int i=;i<=m;i++) //scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
96 a[i].x=read(),a[i].y=read(),a[i].z=read();
97
98 sort(a+,a+m+,cmp);
99 for (int i=;i<=n;i++) f[i]=i;
for (int i=;i<=m;i++)
{
int x=find(a[i].x);
int y=find(a[i].y);
if (x!=y)
{
add(a[i].x,a[i].y,a[i].z);
add(a[i].y,a[i].x,a[i].z);
f[x]=y;
}
}
dfs(,,,);
//for (int i=1;i<=n;i++) cout<<dpmax[i][0]<<endl;
for (int i=;i<;i++)
for (int j=;j<=n;j++){
dpmax[j][i]=max(dpmax[j][i-],dpmax[dp[j][i-]][i-]);
dp[j][i]=dp[dp[j][i-]][i-];
}
int Q;
// scanf("%d",&Q);
Q=read();
int ans=;
while (Q--)
{
int p1,p2,q1,q2;
// scanf("%d%d%d%d",&p1,&p2,&q1,&q2);
p1=read(),p2=read(),q1=read(),q2=read();
int x=1ll*(ans+p1)*p2%n+;
int y=1ll*(ans+q1)*q2%n+;
// cout<<x<<y<<endl;
ans=lca(x,y);
printf("%d\n",ans);
}
return ;
}
TYVJ P1577 泥泞的道路的更多相关文章
- Codevs 1183 泥泞的道路
1183 泥泞的道路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路 ...
- 【Codevs1183】泥泞的道路
Position: http://codevs.cn/problem/1183/ List Codevs1183 泥泞的道路 List Description Input Output Sample ...
- codevs1183 泥泞的道路(01分数规划)
1183 泥泞的道路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description CS有n个小区,并且任意小区之间都有两 ...
- codevs1183 泥泞的道路
题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路(a到b,b到a)相连.因为最近下了很多暴雨,很多道路都被淹了,不同的道路泥泞程度不同.小A经过对近期天气和地形的科学 ...
- 泥泞的道路(codevs 1183)
题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路(a到b,b到a)相连.因为最近下了很多暴雨,很多道路都被淹了,不同的道路泥泞程度不同.小A经过对近期天气和地形的科学 ...
- codevs 1183 泥泞的道路 01分数规划
题目链接 题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路(a到b,b到a)相连.因为最近下了很多暴雨,很多道路都被淹了,不同的道路泥泞程度不同.小A经过对近期天气和 ...
- CODEVS——T1183 泥泞的道路
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路(a到 ...
- codevs1183泥泞的道路
题意:给定一张有向稠密图和通过每条边的时间和路程,问从1到n的路程/时间 最大为多少 正解:SPFA+二分答案 开始做的时候,想直接跑图论,后来发现好像不对(不然数据范围怎么这么小) 但是显然要用到图 ...
- codevs 1183 泥泞的道路 (二分+SPFA+差分约束)
/* 二分答案(注意精度) 对于每一个答案 有(s1+s2+s3...)/(t1+t2+t3...)>=ans 时符合条件 这时ans有变大的空间 对于上述不等式如果枚举每一条路显得太暴力 化简 ...
随机推荐
- iOS开发遇见的坑之二:工程文件中插件和自身工程命名冲突
在升级cocoapod后,我重新管理了一下工程,其实也就是把各个类分类进行管理 类似于这样 然后编译就发现不能运行 1.其中一个错误是工程文件缺失,根据提示添加进来进行 2.有一个是pch的相对路径变 ...
- jQuery实现滚动条下拉时无限加载
var lastId=0;//记录每一次加载时的最后一条记录id,跟您的排序方式有关. var isloading = false; $(window).bind("scroll" ...
- RN原生的安卓UI组件
https://facebook.github.io/react-native/docs/native-components-android.html 这里有一大堆的原生组件可以用,一些是平台自带的, ...
- Maven项目:@Override is not allowed when implement interface method
今天新建一个maven项目实现接口方法的时候报错编译不通过@Override is not allowed when implement interface method,要配置pom文件的compi ...
- Vue.js—单元测试
Vue.js--测试 这里采用的是Vue官方工具(Vue-CLI)搭建出来的项目,在这个搭建工具中推荐的两种测试分别是 端到端的测试 E2E 单元测试 Unit Test 端到端的测试(E2E) E2 ...
- 【css】背景图片填充
background: url(../img/icon_img/blue_gou.png) 0 0 no-repeat; background-size: cover; border-color: # ...
- python-小数据池,再谈编码,is和 == 的区别
一 . 小数据池 # 小数据池针对的是: int, str, bool 在py文件中几乎所有的字符串都会缓存. # id() 查看变量的内存地址 s = 'attila' print(id(s)) 二 ...
- 基于链式链表的栈链式存储的C风格实现
链式链表的头文件与CPP文件见前文 头文件: #ifndef _LINKSTACK_H_ #define _LINKSTACK_H_ typedef void LinkStack; //创建一个栈 L ...
- cs229_part5
这部分主要补充一些cs229没涉及到,但是实际上非常重要,而且是实际中真正会用的一些算法,即集成学习. 集成学习 问题背景 既然我们已经知道了很多学习算法,这些算法最终会输出一个结果.能不能把这些结果 ...
- jQuery DOM 互转
jQuery对象与DOM对象是不一样的 通过一个简单的例子,简单区分下jQuery对象与DOM对象: <p id=”imooc”></p> 我们要获取页面上这个id为imooc ...