B1922 [Sdoi2010]大陸爭霸 最短路

我一直都不會dij的堆優化,今天搞了一下。。。就是先弄一個優先隊列,存每個點的數據,然后這個題就加了一點不一樣的東西,每次的最短路算兩次,一次是自己的最短路,另一次是機關的最短路,兩者取最大值才是該點的真正的最短路。

dij堆優化鏈接

題干:

Description
在一個遙遠的世界里有兩個國家:位于大陸西端的杰森國和位于大陸東端的 克里斯國。兩個國家的人民分別信仰兩個對立的神:杰森國信仰象征黑暗和毀滅 的神曾·布拉澤,而克里斯國信仰象征光明和永恒的神斯普林·布拉澤。 幻想歷 8012年 1月,杰森國正式宣布曾·布拉澤是他們唯一信仰的神,同 時開始迫害在杰森國的信仰斯普林·布拉澤的克里斯國教徒。 幻想歷 8012年 3月2日,位于杰森國東部小鎮神諭鎮的克里斯國教徒發動 起義。 幻想歷 8012年 3月7日,神諭鎮的起義被杰森國大軍以殘酷手段鎮壓。 幻想歷 8012年 3月8日,克里斯國對杰森國宣戰。由數十萬大軍組成的克 里斯軍團開至兩國邊境,與杰森軍團對峙。 幻想歷 8012年 4月,克里斯軍團攻破杰森軍團防線進入神諭鎮,該鎮幸存 的克里斯國教徒得到解放。 戰爭隨后進入膠著狀態,曠日持久。戰況慘烈,一時間槍林彈雨,硝煙彌漫, 民不聊生。 幻想歷 8012年 5月12日深夜,斯普林·布拉澤降下神諭:“Trust me, earn eternal life.”克里斯軍團士氣大增。作為克里斯軍團的主帥,你決定利用這一機 會發動奇襲,一舉擊敗杰森國。具體地說,杰森國有 N 個城市,由 M條單向道 路連接。神諭鎮是城市 1而杰森國的首都是城市 N。你只需摧毀位于杰森國首都 的曾·布拉澤大神殿,杰森國的信仰,軍隊還有一切就都會土崩瓦解,灰飛煙滅。 為了盡量減小己方的消耗,你決定使用自爆機器人完成這一任務。唯一的困 難是,杰森國的一部分城市有結界保護,不破壞掉結界就無法進入城市。而每個 城市的結界都是由分布在其他城市中的一些結界發生器維持的,如果想進入某個 城市,你就必須破壞掉維持這個城市結界的所有結界發生器。 現在你有無限多的自爆機器人,一旦進入了某個城市,自爆機器人可以瞬間 引爆,破壞一個目標(結界發生器,或是杰森國大神殿),當然機器人本身也會 一起被破壞。你需要知道:摧毀杰森國所需的最短時間。
Input
第一行兩個正整數 N, M。 接下來 M行,每行三個正整數 ui, vi, wi,表示有一條從城市ui到城市 vi的單 向道路,自爆機器人通過這條道路需要 wi的時間。 之后 N 行,每行描述一個城市。首先是一個正整數 li,維持這個城市結界所 使用的結界發生器數目。之后li個1~N 之間的城市編號,表示每個結界發生器的 位置。如果 Li = 0,則說明該城市沒有結界保護,保證L1 = 0 。
Output
僅包含一個正整數 ,擊敗杰森國所需的最短時間。
Sample Input
6 6 1 2 1 1 4 3 2 3 1 2 5 2 4 6 2 5 3 2 0 0 0 1 3 0 2 3 5 
Sample Output
5

代碼:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define duke(i,a,n) for(int i = a;i <= n;i++)
#define lv(i,a,n) for(int i = a;i >= n;i--)
#define clean(a) memset(a,0,sizeof(a))
const int INF = 1 << 30;
typedef long long ll;
typedef double db;
template <class T>
void read(T &x)
{char c;bool op = 0;while(c = getchar(), c < '0' || c > '9')if(c == '-') op = 1;x = c - '0';while(c = getchar(), c >= '0' && c <= '9')x = x * 10 + c - '0';if(op) x = -x;
}
template <class T>
void write(T x)
{if(x < 0) putchar('-'), x = -x;if(x >= 10) write(x / 10);putchar('0' + x % 10);
}
struct node
{int l,r,nxt,w;bool operator < (const node &other) const{return w < other.w;}
} a[70005];
struct point
{int x,dis;bool operator < (const point &other) const{return (other.dis < dis) || (x < other.x && dis == other.dis);}
};
int len = 0,last[3005],m,n;
int vis[3005];
int d1[3005],d2[3005],d[3005];
int st[3005][3005];
priority_queue <point> qu;
void add(int x,int y,int w)
{a[++len].l = x;a[len].r = y;a[len].w = w;a[len].nxt = last[x];last[x] = len;
}
void dij()
{vis[1] = 0;d1[1] = 0;qu.push((point){1,max(d1[1],d2[1])});while(!qu.empty()){point g = qu.top();qu.pop();if(vis[g.x])continue;if(g.dis != max(d1[g.x],d2[g.x]))continue;for(int i = last[g.x]; i; i=a[i].nxt){int j = a[i].r;if(d1[j]>g.dis+a[i].w){d1[j] = g.dis + a[i].w;if(!d[j]) qu.push((point){j,max(d1[j],d2[j])});}}for(int i=1; i<=st[g.x][0]; ++i){d[st[g.x][i]]--;if(!d[st[g.x][i]]){d2[st[g.x][i]]=g.dis;qu.push((point){st[g.x][i],max(d1[st[g.x][i]],d2[st[g.x][i]])});}}vis[g.x] = 1; }
}
int main()
{read(n);read(m);duke(i,1,m){int x,y,w;read(x);read(y);read(w);add(x,y,w);}memset(d1,127,sizeof(d1));duke(i,1,n){int p;read(d[i]);duke(j,1,d[i]){read(p);st[p][++st[p][0]] = i;}}dij();printf("%d\n",max(d1[n],d2[n]));return 0;
}
/*
6 6
1 2 1
1 4 3
2 3 1
2 5 2
4 6 2
5 3 2
0
0
0
1 3
0
2 3 5
*/

?

轉載于:https://www.cnblogs.com/DukeLv/p/9532441.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388748.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388748.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388748.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WPF中的鼠標事件詳解

WPF中的鼠標事件詳解 Uielement和ContentElement都定義了十個以Mouse開頭的事件&#xff0c;8個以PreviewMouse開頭的事件&#xff0c;MouseMove,PreviewMouseMove,MouseEnter,Mouseleave的事件處理器類型都是MouseEventHandler類型。這些事件都具備對應得MouseEventargs對象。…

數據統計 測試方法_統計測試:了解如何為數據選擇最佳測試!

數據統計 測試方法This post is not meant for seasoned statisticians. This is geared towards data scientists and machine learning (ML) learners & practitioners, who like me, do not come from a statistical background.?他的職位是不是意味著經驗豐富的統計人…

前端介紹-35

前端介紹-35 # 前端## 一、什么是前端 前端即網站前臺部分&#xff0c;運行在PC端&#xff0c;移動端等瀏覽器上展現給用戶瀏覽的網頁。隨著互聯網技術的發展&#xff0c;HTML5&#xff0c;CSS3&#xff0c;前端框架的應用&#xff0c;跨平臺響應式網頁設計能夠適應各種屏幕…

spring的幾個通知(前置、后置、環繞、異常、最終)

1、沒有異常的 2、有異常的 1、被代理類接口Person.java 1 package com.xiaostudy;2 3 /**4 * desc 被代理類接口5 * 6 * author xiaostudy7 *8 */9 public interface Person { 10 11 public void add(); 12 public void update(); 13 public void delete();…

每個Power BI開發人員的Power Query提示

If someone asks you to define the Power Query, what should you say? If you’ve ever worked with Power BI, there is no chance that you haven’t used Power Query, even if you weren’t aware of it. Therefore, one could easily say that Power Query is the “he…

c# PDF 轉換成圖片

1.新建項目 2.新增一個新文件夾“lib”&#xff08;主要是為了存放引用的dll&#xff09; 3.將“gsdll32.dll 、PDFLibNet.dll 、PDFView.dll”3個dll添加到文件夾中 4.項目添加“PDFLibNet.dll 、PDFView.dll”2個類庫的引用&#xff0c;并將gsdll32.dll 拷貝到項目生產根…

java finally在return_Java finally語句到底是在return之前還是之后執行?

點擊上方“方志朋”&#xff0c;選擇“置頂或者星標”你的關注意義重大&#xff01;網上有很多人探討Java中異常捕獲機制try...catch...finally塊中的finally語句是不是一定會被執行&#xff1f;很多人都說不是&#xff0c;當然他們的回答是正確的&#xff0c;經過我試驗&#…

oracle 死鎖

為什么80%的碼農都做不了架構師&#xff1f;>>> ORA-01013: user requested cancel of current operation 轉載于:https://my.oschina.net/8808/blog/2994537

面試題:二叉樹的深度

題目描述&#xff1a;輸入一棵二叉樹&#xff0c;求該樹的深度。從根結點到葉結點依次經過的結點&#xff08;含根、葉結點&#xff09;形成樹的一條路徑&#xff0c;最長路徑的長度為樹的深度。 思路&#xff1a;遞歸 //遞歸 public class Solution {public int TreeDepth(Tre…

a/b測試_如何進行A / B測試?

a/b測試The idea of A/B testing is to present different content to different variants (user groups), gather their reactions and user behaviour and use the results to build product or marketing strategies in the future.A / B測試的想法是將不同的內容呈現給不同…

hibernate h2變mysql_struts2-hibernate-mysql開發案例 -解道Jdon

Hibernate專題struts2-hibernate-mysql開發案例與源碼源碼下載本案例展示使用Struts2&#xff0c;Hibernate和MySQL數據庫開發一個個人音樂管理器Web應用程序。&#xff0c;可將您的音樂收藏添加到數據庫中。功能有&#xff1a;顯示一個添加記錄的表單和所有的音樂收藏的列表。…

P5024 保衛王國

傳送門 我現在還是不明白為什么NOIPd2t3會是一道動態dp…… 首先關于動態dp可以看這里 然后這里就是把把矩陣給改一改&#xff0c;改成這個形式\[\left[dp_{i-1,0},dp_{i-1,1}\right]\times \left[\begin{matrix}\infty&ldp_{i,1}\\ldp_{i,0}&ldp_{i,1}\end{matrix}\ri…

提取圖像感興趣區域_從圖像中提取感興趣區域

提取圖像感興趣區域Welcome to the second post in this series where we talk about extracting regions of interest (ROI) from images using OpenCV and Python.歡迎來到本系列的第二篇文章&#xff0c;我們討論使用OpenCV和Python從圖像中提取感興趣區域(ROI)。 As a rec…

解決java compiler level does not match the version of the installed java project facet

ava compiler level does not match the version of the installed java project facet錯誤的解決 因工作的關系&#xff0c;Eclipse開發的Java項目拷來拷去&#xff0c;有時候會報一個很奇怪的錯誤。明明源碼一模一樣&#xff0c;為什么項目復制到另一臺機器上&#xff0c;就會…

php模板如何使用,ThinkPHP如何使用模板

到目前為止&#xff0c;我們只是使用了控制器和模型&#xff0c;還沒有接觸視圖&#xff0c;下面來給上面的應用添加視圖模板。首先我們修改下 Action 的 index 操作方法&#xff0c;添加模板賦值和渲染模板操作。PHP代碼classIndexActionextendsAction{publicfunctionindex(){…

理解Windows窗體和WPF中的跨線程調用

你曾開發過Windows窗體程序&#xff0c;可能會注意到有時事件處理程序將拋出InvalidOperationException異常&#xff0c;信息為“ 跨線程調用非法&#xff1a;在非創建控件的線程上訪問該控件”。這種Windows窗體應用程序中 跨線程調用時的一個最為奇怪的行為就是&#xff0c;有…

什么是嵌入式系統

在我們的日常生活中&#xff0c;我們經常使用許多使用嵌入式系統技術設計的電氣和電子電路和套件。計算機&#xff0c;手機&#xff0c;平板&#xff0c;筆記本電腦&#xff0c;數字電子系統以及其他電子和電子設備都是使用嵌入式系統設計的。 什么是嵌入式系統&#xff1f;將硬…

面向數據科學家的實用統計學_數據科學家必知的統計數據

面向數據科學家的實用統計學Beginners usually ignore most foundational statistical knowledge. To understand different models, and various techniques better, these concepts are essential. These work as baseline knowledge for various concepts involved in data …

字符串、指針、引用、數組基礎

1.字符串&#xff1a;字符是由單引號所括住的單個字母、數字或符號。若將單引號改為雙引號&#xff0c;該字符就會變成字符串。它們之間主要的差別是&#xff1a;雙引號的字符串“A”會比單引號的字符串’A’在字符串的最后補上一個結束符’\0’&#xff08;Null字符&#xff0…

suse安裝php,SUSE下安裝LAMP

安裝Apache可以看到編譯安裝Apache出錯&#xff0c;rpm包安裝gcc (首先要安裝GCC)makemake install修改apache端口cd /home/sxit/apache2vi conf/httpd.confListen 8000啟動 apache/home/root/apache2/bin/apachectl start(stop restart)http://localhost:8000安裝一下PHP開發…