Bzoj 2662: [BeiJing wc2012]凍結 dijkstra,堆,分層圖,最短路

2662: [BeiJing wc2012]凍結?

Time Limit:?3 Sec??Memory Limit:?128 MB
Submit:?647??Solved:?348
[Submit][Status][Discuss]

Description

? “我要成為魔法少女!”???
? “那么,以靈魂為代價,你希望得到什么?”?
“我要將有關魔法和奇跡的一切,封印于卡片之中??”???
???
? 在這個愿望被實現以后的世界里,人們享受著魔法卡片(SpellCard,又名符
卡)帶來的便捷。?
?
現在,不需要立下契約也可以使用魔法了!你還不來試一試??
? 比如,我們在魔法百科全書(Encyclopedia? of? Spells)里用“freeze”作為關
鍵字來查詢,會有很多有趣的結果。?
例如,我們熟知的Cirno,她的冰凍魔法當然會有對應的 SpellCard 了。 當然,
更加令人驚訝的是,居然有凍結時間的魔法,Cirno 的凍青蛙比起這些來真是小
巫見大巫了。?
這說明之前的世界中有很多魔法少女曾許下控制時間的愿望,比如 Akemi?
Homura、Sakuya Izayoi、???
當然,在本題中我們并不是要來研究歷史的,而是研究魔法的應用。?
?
我們考慮最簡單的旅行問題吧:? 現在這個大陸上有 N 個城市,M 條雙向的
道路。城市編號為 1~N,我們在 1 號城市,需要到 N 號城市,怎樣才能最快地
到達呢??
? 這不就是最短路問題嗎?我們都知道可以用 Dijkstra、Bellman-Ford、
Floyd-Warshall等算法來解決。?
? 現在,我們一共有 K 張可以使時間變慢 50%的 SpellCard,也就是說,在通
過某條路徑時,我們可以選擇使用一張卡片,這樣,我們通過這一條道路的時間
就可以減少到原先的一半。需要注意的是:?
? 1. 在一條道路上最多只能使用一張 SpellCard。?
? 2. 使用一張SpellCard 只在一條道路上起作用。?
? 3. 你不必使用完所有的 SpellCard。?
???
? 給定以上的信息,你的任務是:求出在可以使用這不超過 K 張時間減速的
SpellCard 之情形下,從城市1 到城市N最少需要多長時間。?

?

Input


第一行包含三個整數:N、M、K。?
接下來 M 行,每行包含三個整數:Ai、Bi、Timei,表示存在一條 Ai與 Bi之
間的雙向道路,在不使用 SpellCard 之前提下,通過它需要 Timei的時間。?

?

Output

輸出一個整數,表示從1 號城市到 N號城市的最小用時。?

?

Sample Input

4 4 1
1 2 4
4 2 6
1 3 8
3 4 8

Sample Output

7
【樣例1 解釋】
在不使用 SpellCard 時,最短路為 1à2à4,總時間為 10。現在我們可
以使用 1 次 SpellCard,那么我們將通過 2à4 這條道路的時間減半,此時總
時間為7。

HINT

?

對于100%的數據:1? ≤? K? ≤? N ≤? 50,M? ≤? 1000。?

? 1≤? Ai,Bi ≤? N,2 ≤? Timei? ≤? 2000。?

為保證答案為整數,保證所有的 Timei均為偶數。?

所有數據中的無向圖保證無自環、重邊,且是連通的。???

?

?

Source

題解:
分層圖+堆+dijkstra
太弱了。。。10分鐘根本打不完。。。
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define MAXN 60
 4 #define MAXM 1010
 5 #define INF 1e9
 6 struct node
 7 {
 8     int begin,end,value,next;
 9 }edge[MAXM*MAXN*4];
10 int cnt,Head[MAXN*MAXN],N,U[MAXM],V[MAXM],VAL[MAXM],dis[MAXN*MAXN],Heap[MAXN*MAXN],pos[MAXN*MAXN],SIZE;
11 void addedge(int bb,int ee,int vv)
12 {
13     edge[++cnt].begin=bb;edge[cnt].end=ee;edge[cnt].value=vv;edge[cnt].next=Head[bb];Head[bb]=cnt;
14 }
15 void addedge1(int bb,int ee,int vv)
16 {
17     addedge(bb,ee,vv);addedge(ee,bb,vv);
18 }
19 int read()
20 {
21     int s=0,fh=1;char ch=getchar();
22     while(ch<'0'||ch>'9'){if(ch=='-')fh=-1;ch=getchar();}
23     while(ch>='0'&&ch<='9'){s=s*10+(ch-'0');ch=getchar();}
24     return s*fh;
25 }
26 void Push1(int k)
27 {
28     int now=k,root;
29     while(now>1)
30     {
31         root=now/2;
32         if(dis[Heap[root]]<=dis[Heap[now]])return;
33         swap(Heap[root],Heap[now]);
34         swap(pos[Heap[root]],pos[Heap[now]]);
35         now=root;
36     }
37 }
38 void Insert(int k)
39 {
40     Heap[++SIZE]=k;pos[k]=SIZE;Push1(SIZE);
41 }
42 void Pop1(int k)
43 {
44     int now,root=k;
45     pos[Heap[k]]=0;Heap[1]=Heap[SIZE--];if(SIZE>0)pos[Heap[k]]=k;
46     while(root<=SIZE/2)
47     {
48         now=root*2;
49         if(now<SIZE&&dis[Heap[now+1]]<dis[Heap[now]])now++;
50         if(dis[Heap[root]]<dis[Heap[now]])return;
51         swap(Heap[root],Heap[now]);
52         swap(pos[Heap[root]],pos[Heap[now]]);
53         root=now;
54     }
55 }
56 void dijkstra(int start)
57 {
58     int i,u,v;
59     for(i=1;i<=N;i++)dis[i]=INF;dis[start]=0;
60     for(i=1;i<=N;i++)Insert(i);
61     while(SIZE>0)
62     {
63         u=Heap[1];Pop1(pos[u]);
64         for(i=Head[u];i!=-1;i=edge[i].next)
65         {
66             v=edge[i].end;
67             if(dis[v]>dis[u]+edge[i].value){dis[v]=dis[u]+edge[i].value;Push1(pos[v]);}
68         }
69     }
70 }
71 int main()
72 {
73     int n,m,k,i,j,MN;
74     n=read();m=read();k=read();
75     for(i=1;i<=m;i++)
76     {
77         U[i]=read();V[i]=read();VAL[i]=read();
78     }
79     memset(Head,-1,sizeof(Head));cnt=1;
80     N=(k+1)*n;
81     for(i=0;i<=k;i++)
82     {
83         for(j=1;j<=m;j++)addedge1(i*n+U[j],i*n+V[j],VAL[j]);
84         if(i!=k)
85         {
86             for(j=1;j<=m;j++){addedge(i*n+U[j],(i+1)*n+V[j],VAL[j]/2);addedge(i*n+V[j],(i+1)*n+U[j],VAL[j]/2);}
87         }
88     }
89     dijkstra(1);
90     MN=INF;
91     for(i=0;i<=k;i++)MN=min(MN,dis[i*n+n]);
92     printf("%d",MN);
93     return 0;
94 }

?

轉載于:https://www.cnblogs.com/Var123/p/5328206.html

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

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

相關文章

[轉]opencv學習資料

轉自&#xff1a;http://blog.csdn.net/poem_qianmo/article/details/20537737 1&#xff1a;Mat imread(const string& filename, intflags1 ); eg: Mat image0imread("dota.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);//載入最真實的圖像 ge1i…

linux servlet 亂碼問題,Servlet一次亂碼排查后的總結

由來在寫一個小小的表單提交功能的時候&#xff0c;出現了亂碼&#xff0c;很奇怪request上來的參數全部是亂碼&#xff0c;而從數據庫查詢出來的中文顯示到頁面正常&#xff0c;鎖定肯定是request對象那里出了問題。后來經過排查&#xff0c;發現是我封裝的框架中出了問題&…

C/C++回調函數

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 對于很多初學者來說&#xff0c;往往覺得回調函數很神秘&#xff0c;很想知道回調函數…

Linux 命令[2]:mkdir

make directories mkdir -p [目錄名] -p 遞歸創建 [rootlocalhost ~]# mkdir -p test [rootlocalhost ~]# ls anaconda-ks.cfg install.log install.log.syslog test 當然只創建一個目錄 -p 是可以省略的 注&#xff1a;如果創建多級目錄沒有 -p 會報錯 如&#xff1a; [roo…

jQuery動態設置樣式List item

前段時間&#xff0c;Insus.NET有修改一個功能《激活當前視圖菜單高亮呈現》http://www.cnblogs.com/insus/p/5287093.html 今天Insus.NET想改用另外一個方法來實現&#xff0c;使用jQuery。在ASP.NET MVC 環境實現&#xff1a; 代碼&#xff1a; <ul><li><a hr…

linux telnet 權限,允許telnet 通過root用戶進行訪問

允許telnet 通過root用戶進行訪問RHEL6:[rootclovem ~]# yum install telnet-server -y //安裝telnet服務端[rootclovem ~]# cat /etc/xinetd.d/telnet //開啟telnet的托管服務# default: on# description: The telnet server serves telnet sessions; it uses \#unencrypt…

TOUGHRADIUS 項目介紹

2019獨角獸企業重金招聘Python工程師標準>>> TOUGHRADIUS 項目介紹 ToughRADIUS是一個開源的Radius服務軟件&#xff0c;采用于 Apache License 2.0 許可協議發布&#xff0c;從創立之日起&#xff0c;他的宗旨就是服務于中小微ISP&#xff0c;讓運營變得更簡單。 T…

轉:Jmeter 用戶思考時間(User think time),定時器,和代理服務器(proxy server)...

在負載測試中需要考慮的的一個重要要素是思考時間&#xff08;think time&#xff09;&#xff0c; 也就是在兩次成功的訪問請求之間的暫停時間。 有多種情形揮發導致延遲的發生&#xff1a; 用戶需要時間閱讀文字內容&#xff0c;或者填表&#xff0c;或者查找正確的鏈接等。未…

linux sql語句傳參數,Linux/Unixshell參數傳遞到SQL腳本

在數據庫運維的過程中&#xff0c;Shell 腳本在很大程度上為運維提供了極大的便利性。而shell 腳本參數作為變量傳遞給SQL以及SQL腳本也是DB在數據庫運維的過程中&#xff0c;Shell 腳本在很大程度上為運維提供了極大的便利性。而shell 腳本參數作為變量傳遞給SQL以及SQL腳本也…

Myeclipse5.5獲取注冊碼

2019獨角獸企業重金招聘Python工程師標準>>> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class MyEclipseGen {private static final String LL "Decompiling this copyrighted software is a vi…

虛函數和純虛函數的區別

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 首先&#xff1a;強調一個概念 定義一個函數為虛函數&#xff0c;不代表函數為不被實…

工作日志WebRoot--編輯頁關于處理兩個關聯的選擇框

案例&#xff1a;點擊編輯&#xff0c;彈出界面后每個欄目都有一個默認的數值&#xff0c;但若其中一個選擇框發生更改&#xff0c;則觸發另一選擇框內的數據發生變動&#xff08;例如組織機構選擇發生變動&#xff0c;則相對應的組織機構的下屬機構也發生變動&#xff09;。 解…

linux下r語言畫圖,linux命令行下使用R語言繪圖實例講解

使用系統&#xff1a;centos 6.4 64bit在R語言中可以使用png()等函數生成圖片&#xff0c;例如&#xff1a; png("aa.png")可以生成圖片。但是如果你是通過shell遠程連接到系統上&#xff0c;可能會碰到如下錯誤&#xff1a;> png("aa.png")錯誤于.Exte…

Windows Mobile Gprs連接與數據傳輸

此模塊分兩部分完成&#xff0c;傳輸數據用socket &#xff0c;要使用socket在ppc上進行數據傳輸&#xff0c;就要誰讓ppc自動連接gprs 。其中套接字和gprs鏈接分別進行說明。 一 &#xff0c;應用程序在進行其它所需的Windows Sockets API調用需要進行一次成功的WSAStartup()調…

C語言變量的類型和存儲位置

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 1. C語言變量主要分為全局變量、靜態全局變量、局部變量、靜態局部變量和寄存器變量。…

nginx+tomcat負載均衡

最近練習nginxtomcat負載均衡。根據一些資料整理了大體思路&#xff0c;最終實現了1個nginx2個tomcat負載均衡。 安裝JDK 1》進入安裝目錄&#xff0c;給所有用戶添加可執行的權限 #chmod x jdk-7u67-linux-i586.rpm //不知這步有沒有必要 2》安裝JDK 輸入命令#rpm –ivh jdk-7…

linux 最強shell,最牛B 的 Linux Shell 命令(一)

引言Shell作為Unix系操作系統當中最有魅力且不可或缺的組件&#xff0c;經過數十載的洗禮不僅沒有被淘汰&#xff0c;而且愈加變得成熟穩健&#xff0c;究其原因&#xff0c;大概因為它是個非常穩固的粘合劑&#xff0c;能夠把大量功能強大的組件任意配搭&#xff0c;總能很好很…

更改Docker默認的images存儲位置

Docker的鏡像以及一些數據都是在/var/lib/docker目錄下&#xff0c;它占用的是Linux的系統分區&#xff0c;也就是下面的/dev/vda1,當有多個鏡像時&#xff0c;/dev/vda1的空間可能不足&#xff0c;我們可以把docker的數據掛載到數據盤&#xff0c;例如&#xff1a;/dev/vdb目錄…

malloc/free和new/delete的區別

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** malloc與free是C/C語言的標準庫函數&#xff0c;new/delete是C的運算符。它們都可用于…

HDU 1217 Arbitrage (Floyd + SPFA判環)

題目鏈接&#xff1a;HDU 1217 Arbitrage 簡單的貨幣轉換問題&#xff0c;給定多種貨幣&#xff0c;以及貨幣之間的匯率&#xff0c;問能否通過貨幣的轉換實現收益。 例如&#xff1a; 1 US Dollar buys 0.5 British pound, 1 British pound buys 10.0 French francs, and 1 F…