当前位置: 首页 > news >正文

归程p4768

link
如果把所有互相之间的边没有积水的点看成一个个的块,显然块内部可以开车直接到达,也就是说块内部所有点的答案是一样的;
我们可以先用dij把每一个点到1号点的最短路预处理出来,建一棵kruskal重构树,然后在dfs时把这一个子树内的最小答案挂在根节点上;
最后我们倍增找到出发节点所在块的根节点(最浅的那一个),输出其答案即可;

#include<bits/stdc++.h>
#define m(a) memset(a, 0, sizeof(a))
using namespace std;
const int N = (2e5 + 5) * 2;
const int M = 4e5 + 5;
int T, n, m, q, k, s, dis[N], vis[N], fa[N], f[N][22], dq[N];
vector<pair<int, int> > mp[N];
vector<int> tr[N];
struct edge{int u, v, l, a;
}e[M];
struct node{int id, w;friend bool operator <(node a, node b) {return a.w > b.w;}
};
bool cmp(edge x, edge y){return x.a > y.a;
}
int find(int x){if(fa[x] == x) return x;return fa[x] = find(fa[x]);
}
void dij(){priority_queue<node> q;for(int i = 1; i <= n; i++) dis[i] = 0x3f3f3f3f;dis[1] = 0;q.push({1, 0});while(!q.empty()){int u = q.top().id;q.pop();if(vis[u]) continue;vis[u] = 1;for(auto tmp : mp[u]){int v = tmp.first;int w = tmp.second;if(dis[v] > dis[u] + w){dis[v] = dis[u] + w;q.push({v, dis[v]});}}}	
}
void kruskal(){sort(e + 1, e + m + 1, cmp);for(int i = 1; i <= n; i++) fa[i] = i, dq[i] = 0;for(int i = 1; i <= m; i++){int f1 = find(e[i].u);int f2 = find(e[i].v);if(f1 == f2) continue;fa[f1] = fa[f2] = fa[++n] = n;dq[n] = e[i].a; dis[n] = 0x3f3f3f3f;tr[n].push_back(f1); tr[n].push_back(f2);}
}
void dfs(int u, int father){f[u][0] = father;for(int j = 1; j <= 20; j++) f[u][j] = f[f[u][j - 1]][j - 1];for(auto v : tr[u]){dfs(v, u);dis[u] = min(dis[u], dis[v]);}
}
int main(){cin >> T;while(T--){int lastans = 0;m(e); m(tr); m(vis); m(dis); m(fa); m(f); m(dq);cin >> n >> m;int cnt = n;for(int i = 1; i <= n * 2; i++) mp[i].clear(), tr[i].clear();for(int i = 1; i <= m; i++){cin >> e[i].u >> e[i].v >> e[i].l >> e[i].a;mp[e[i].u].push_back({e[i].v, e[i].l});mp[e[i].v].push_back({e[i].u, e[i].l});}cin >> q >> k >> s;dij();kruskal();dfs(n, n);for(int i = 1; i <= q; i++){int v0, p0;cin >> v0 >> p0;int c = (v0 + k * lastans - 1) % cnt + 1;int p = (p0 + k * lastans) % (s + 1);for(int j = 20; j >= 0; j--){if(dq[f[c][j]] > p){c = f[c][j];}	}	lastans = dis[c];cout << lastans << endl;}}
}
http://www.jsqmd.com/news/62811/

相关文章:

  • 2025年圆形类工件柔性专业抓取厂商选型指南
  • Visual Studio 2026 Product Keys
  • html 和css基础常用的标签和样式(2)-css - 实践
  • 计算粗心马虎纠正初中数学辅导精选:从根源培养严谨习惯,有效减少不必要的失分
  • 二极管三极管静态参数测试仪系统设备STD2000X--半导体领域和制造领域 - FORCREAT
  • 2025年上海AI搜索结果优化渠道权威推荐榜单:上海AISEO机构/上海GEO关键词优化代运营/上海AI结果优化营销服务商综合评测
  • 完整教程:一篇最全Python 爬虫超详细讲解(零基础入门,适合小白)
  • 详细介绍:“AI+XR”赋能智慧研创中心:告别AI焦虑,重塑教师未来
  • 昆明婚纱摄影店榜上的浪漫选择
  • CAP博客集合
  • 【SPIE出版 | EI检索】第七届光电材料与器件国际研讨会(ICOMD 2025)
  • 2025年中国五大振动传感器品牌推荐:传感器售后服务哪家好?
  • 2025年智能传感器五大品牌推荐榜单,看哪家口碑好
  • 2025年Q4销量认证公司TOP5推荐:五个品牌权威测评,多维度合规选购全指南
  • Java 包装类(Wrapper Class)详细解析
  • 2025年Q4顶尖内容审核公司推荐:AI驱动合规时代的全场景防护指南
  • excel导入导出 - 详解
  • 普通莫队板子
  • 年度绩效考核推进需要注意的五大事项
  • 2025年N2氮气发泡罐批发厂家权威推荐榜单:鞋底中底发泡罐/体育器材发泡罐/高压发泡罐源头厂家精选
  • 初中数学培训全托辅导机构哪里找:全天候个性化管理,实现数学成绩全面提升的优质选择
  • 2025最新推荐!AI写作工具测评榜单,学术价值最大化
  • rust语言声明式宏特殊标识符$crate
  • 2025年面包培训正规厂商推荐,专业面包培训公司与学校排名全
  • 基于MATLAB的最小生成树求解
  • 2025年潍坊西门子直流电机维修公司权威推荐榜单:直流伺服电机维修‌/直流牵引电机维修‌/ABB直流电机维修‌‌源头公司精选
  • 2025年码头护舷订做厂家权威推荐榜单:圆筒型护舷‌/定制护舷‌/防撞护头‌‌源头厂家精选
  • 项目经理需要具备哪些硬技能与软技能?
  • 2025保安过滤器厂家综合实力榜:上海青上过滤稳居行业首选
  • 2025年钛棒过滤器权威榜单揭晓!上海青上过滤以技术革新领跑行业