首页 > 其他分享 >[SDOI2010] 大陆争霸

[SDOI2010] 大陆争霸

时间:2023-12-25 19:11:26浏览次数:46  
标签:争霸 head idx point int SDOI2010 大陆 tG dis

[SDOI2010] 大陆争霸

屁话真多。

第一眼看上去好像是最短路加了个强制拓扑。

也就是说当结界还没被破坏的时候,已经到达的机器人只能干等着。

在 dijkstra 中,机器人所在的点可以更新最短路。但拓扑图上该点的入度不为 \(0\),即结界产生器没有被全部破坏时,不能入队。

当炸掉一个结界产生器的时候,可以将其在拓扑图上连接的所有点的入度减一。

而当拓扑图上的一个点入度为 \(0\),即结界产生器全部被破坏的时候,便可以入队。

不用考虑当前是否有机器人在该点等待(直接 q.push(v, dis[v] = inf))。即使没有,由于题目保证有解,所以若该点在 \(1\to n\) 的最短路上一定可达。之后也会有更优决策来替代它。

#include <bits/stdc++.h>
typedef long long ll;
const int maxn = 3e3 + 20, maxm = 7e4 + 20;
ll dis[maxn];
int mk[maxn];
struct Graph {
	struct edge {
		int u, v, w, next;
	} e[maxm];
	int head[maxn], idx;
	int inDeg[maxn];
	void add(int x, int y, int z) {
		inDeg[y]++;
		idx++; e[idx].u = x, e[idx].v = y, e[idx].w = z;
		e[idx].next = head[x], head[x] = idx;
	}
	Graph() {
		memset(head, 0, sizeof head);
		idx = 0;
	}
};
struct point {
	int u; ll dis;
	point(int a, ll b) {u = a, dis = b;}
	friend bool operator < (point a, point b) {
		return a.dis > b.dis;
	}
};
void dijkstra(int st, int end, Graph &G, Graph &tG) {
	memset(dis, 0x3f, sizeof dis);
	memset(mk, 0, sizeof mk);
	std::priority_queue <point> q; 
	q.push(point(st, 0)); dis[st] = 0;
	while(!q.empty()) {
		int u = q.top().u; q.pop();
		if(u == end) return;
		if(mk[u]) continue;
		mk[u] = 1;
		for(int i = tG.head[u]; i; i = tG.e[i].next) {
			int v = tG.e[i].v; tG.inDeg[v]--;
			dis[v] = std::max(dis[u], dis[v]);
			if(tG.inDeg[v] == 0) q.push(point(v, dis[v]));
		}
		for(int i = G.head[u]; i; i = G.e[i].next) {
			int v = G.e[i].v, w = G.e[i].w;
			if(dis[v] > dis[u] + w) {
				dis[v] = dis[u] + w;
				if(tG.inDeg[v] == 0) q.push(point(v, dis[v]));
			}
		}
	}
}
int n, m;
Graph G, topoG;
void solve() {
	scanf("%d %d", &n, &m);
	for(int i = 1; i <= m; i++) {
		int u, v, w;
		scanf("%d %d %d", &u, &v, &w);
		G.add(u, v, w);
	}
	for(int i = 1; i <= n; i++) {
		int num; scanf("%d", &num);
		for(int j = 1; j <= num; j++) {
			int x; scanf("%d", &x);
			topoG.add(x, i, 0);
		} 
	}
	dijkstra(1, n, G, topoG);
	printf("%lld", dis[n]);
}

标签:争霸,head,idx,point,int,SDOI2010,大陆,tG,dis
From: https://www.cnblogs.com/CQWDX/p/17926781.html

相关文章

  • [SDOI2010] 大陆争霸 题解
    [题目传送门](https://www.luogu.com.cn/problem/P2446)#解法由题可知,一个城市$u$保护城市$v$,所以建一条边$u\tov$表示城市$u$保护城市$v$,因为题目说保证有解,所以建的图一定是一个**有向无环图$DAG$**。再在此基础上求出最短路径。具体过程为设$dis_u$表示实际到达(攻破)$u$的最......
  • 纯粹+享受,独立开发者成功踏上HarmonyOS“新大陆”
    李尚儒,97年,独立开发者,已成功开发了“日升月落”“日出日落时间”“每日咖啡”“腕上阅读器”等多款应用/元服务。从2019年敲下第一行代码,到打造出深受千万用户喜爱的应用/元服务,李尚儒的开发之旅充满了探索与创新。HarmonyOS操作系统的崛起,更为李尚儒提供了一片“新天地”。在这......
  • 特斯拉开源 Roadster 文件随便用;微软 Copilot AI 技术开放或不对大陆开放丨 RTE 开发
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • 特斯拉开源 Roadster 文件随便用;微软 Copilot AI 技术开放或不对大陆开放丨 RTE 开发
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,......
  • 魔兽争霸3冰封王座1.31下载
     魔兽争霸3冰封王座1.31下载链接:https://pan.baidu.com/s/1-if6LjzZVSd_MERuy9ZHpw提取码:shgx......
  • Nature Plants | 从卫星监测的全大陆田间试验数据中获得主要作物性状的可解释机器学习
    目录背景信息论文背景:过去方案:论文的Motivation:实验方法主要结果代码获取澳大利亚国立大学生物研究院研究团队使用机器学习模型分析了大规模农田试验数据和卫星数据,成功预测了重要农作物特征,并揭示了作物行为的驱动因素和复杂相互作用。背景信息论文背景:预计到2050年,全球......
  • 大陆香港5g流量
    5月1日,中国联通在香港正式发布5G服务,推出5G本地数据无忧方案、5GONE大湾区^数据同享方案、5GONE家庭同享方案3大类共30种5G月费套餐。其中,5G本地数据无忧方案月费168~498港元,包括10GB、30GB、50GB、100GB、200GB、300GB等,过量后限速1Mbps或5Mbps,本地语音不定量,另赠送1GB~20GB的内......
  • 国产动漫巅峰存在!斗罗大陆!
    斗罗大陆2-绝世唐门,追完斗罗1的真心可以看看斗罗2,剧情与时俱进,增加科技感,新式武器才是未来战争制胜的关键!斗罗大陆2全集(持续更新中)提取码:lx20 ......
  • 符文大陆团队展示
    队员姓名与学号20211327沈楗翔(队长)20211320李心怡20211312徐元琦20211406张顺阳20211322肖权城队名符文大陆:符乃符合,文乃文学,大乃大气,陆则是光怪陆离,短短四个字概括了我们组成员的群像。年少时期,书生意气挥斥方遒,文乃整组之魂,地势坤,君子当厚德载物,气乃全组之有,光怪陆离如......
  • 贪婪大陆
    P2184贪婪大陆我们考虑记录每个位置作为左右端点的次数的信息。直接在两个位置处+1.查询区间相当于=左端点在当前区间左侧的区间个数-右端点在#include<cstdio>#include<iostream>usingnamespacestd;#defineEdfor(inti=h[x];~i;i=ne[i])#defineLs(i,l,r)for(int......