日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

2019ICPC(南昌) - Fire-Fighting Hero(最短路+思维)

發(fā)布時(shí)間:2024/4/11 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2019ICPC(南昌) - Fire-Fighting Hero(最短路+思维) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接:點(diǎn)擊查看

題目大意:有一個(gè)由n個(gè)點(diǎn),m條邊組成的無(wú)環(huán)無(wú)向圖,題目保證是連通圖,現(xiàn)在每個(gè)點(diǎn)代表一個(gè)著火點(diǎn),有一個(gè)消防英雄和k個(gè)消防隊(duì)伍比賽救火,他們的具體位置輸入時(shí)會(huì)給出,誰(shuí)的分?jǐn)?shù)低誰(shuí)就獲勝,分?jǐn)?shù)的定義如下:

消防英雄:到每個(gè)著火點(diǎn)的最短路中的最大值除以題目中給出的C

消防隊(duì)伍:從k個(gè)隊(duì)伍中選擇最優(yōu)的一個(gè)消防隊(duì)伍(即下半句話中描述的分?jǐn)?shù)最小的隊(duì)伍),也是取到每個(gè)著火點(diǎn)的最短路中的最大值

如果消防英雄獲勝,輸出消防英雄的原分?jǐn)?shù),如果消防隊(duì)伍獲勝,輸出消防隊(duì)伍的原分?jǐn)?shù),如果平局,算是消防英雄獲勝

題目分析:這個(gè)題超級(jí)坑。。一點(diǎn)是比賽時(shí)的答疑區(qū),出題老師把題意說(shuō)錯(cuò)了,雖然并不影響我們隊(duì)做不出這個(gè)題orz,其次就是建邊不好想,想到了就是簡(jiǎn)單的兩邊迪杰斯特拉,想不到就是暴力弗洛伊德,但我們暴力走的給的回饋卻是WA,有點(diǎn)自閉。。說(shuō)一下正解吧,就是將k個(gè)點(diǎn)之間建邊,邊權(quán)為0,這樣就相當(dāng)于將k個(gè)點(diǎn)視為一個(gè)點(diǎn),然后對(duì)一個(gè)點(diǎn)跑一邊迪杰斯特拉,就能直接求出來(lái)k個(gè)點(diǎn)中到達(dá)某一點(diǎn)的最短路了,最后維護(hù)一下最大值即可,簡(jiǎn)單易懂。。但我們想不出來(lái),利用這個(gè)思想也可以直接維護(hù)一個(gè)距離數(shù)組dis[N],然后也是跑一遍迪杰斯特拉,只不過(guò)這次初始化的時(shí)候?qū)個(gè)點(diǎn)都預(yù)先扔進(jìn)優(yōu)先隊(duì)列中,并將dis[i]初始化為0,扔進(jìn)去讓他自己跑答案去吧。。有點(diǎn)bfs搜索的思想,不過(guò)主體還是將k個(gè)點(diǎn)視為一個(gè)點(diǎn),學(xué)到了,真的學(xué)到了。

有個(gè)小細(xì)節(jié)就是,最后為了避免出現(xiàn)浮點(diǎn)數(shù),消防英雄除以C,變成消防隊(duì)伍乘以C即可,爆不了int

上代碼吧,兩個(gè)代碼大同小異:

令第一個(gè)隊(duì)伍為中心點(diǎn),與其他隊(duì)伍建邊權(quán)為0的邊:

#include<iostream> #include<string> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<cstdio> #include<queue> using namespace std; typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e3+100;int n,m,s,k,c;int team[N];int maze[N][N];struct Node {int id,dis;Node(int ID,int DIS){id=ID;dis=DIS;}bool operator<(const Node &a)const{return dis>a.dis;} };priority_queue<Node>q;int d[N];bool vis[N];void Dijkstra(int s) {while(!q.empty())q.pop();for(int i=1;i<=n;i++){d[i]=inf;vis[i]=false;}d[s]=0;q.push(Node(s,0));while(!q.empty()){Node temp=q.top();q.pop();int u=temp.id;int w=temp.dis;if(vis[u])continue;vis[u]=true;for(int i=1;i<=n;i++){if(d[i]>d[u]+maze[u][i]){d[i]=d[u]+maze[u][i];q.push(Node(i,d[i]));}}} } int main() {int w;cin>>w;while(w--){scanf("%d%d%d%d%d",&n,&m,&s,&k,&c);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)maze[i][j]=i==j?0:inf;for(int i=1;i<=k;i++)scanf("%d",team+i);while(m--){int u,v,w;scanf("%d%d%d",&u,&v,&w);if(maze[u][v]>w)maze[u][v]=maze[v][u]=w;}Dijkstra(s);int ans=0;for(int i=1;i<=n;i++)ans=max(ans,d[i]);int ss=team[1];for(int i=1;i<=k;i++)maze[ss][team[i]]=maze[team[i]][ss]=0; Dijkstra(ss);int anss=0;for(int i=1;i<=n;i++)anss=max(anss,d[i]);if(ans<=anss*c)printf("%d\n",ans);else if(ans>anss*c)printf("%d\n",anss);} return 0; }

初始化時(shí)將K個(gè)點(diǎn)都扔進(jìn)優(yōu)先隊(duì)列中:

#include<iostream> #include<string> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<cstdio> #include<queue> using namespace std; typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e3+100;int n,m,s,k,c;int team[N];int maze[N][N];struct Node {int id,dis;Node(int ID,int DIS){id=ID;dis=DIS;}bool operator<(const Node &a)const{return dis>a.dis;} };priority_queue<Node>q;int d[N];bool vis[N];void Dijkstra() {while(!q.empty()){Node temp=q.top();q.pop();int u=temp.id;int w=temp.dis;if(vis[u])continue;vis[u]=true;for(int i=1;i<=n;i++){if(d[i]>d[u]+maze[u][i]){d[i]=d[u]+maze[u][i];q.push(Node(i,d[i]));}}} } void init() {while(!q.empty())q.pop();for(int i=1;i<=n;i++){d[i]=inf;vis[i]=false;} }int main() {int w;cin>>w;while(w--){scanf("%d%d%d%d%d",&n,&m,&s,&k,&c);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)maze[i][j]=i==j?0:inf;for(int i=1;i<=k;i++)scanf("%d",team+i);while(m--){int u,v,w;scanf("%d%d%d",&u,&v,&w);if(maze[u][v]>w)maze[u][v]=maze[v][u]=w;}init();d[s]=0;q.push(Node(s,0));Dijkstra();int ans=0;for(int i=1;i<=n;i++)ans=max(ans,d[i]);init();for(int i=1;i<=k;i++){d[team[i]]=0;q.push(Node(team[i],0));}Dijkstra();int anss=0;for(int i=1;i<=n;i++)anss=max(anss,d[i]);if(ans<=anss*c)printf("%d\n",ans);else if(ans>anss*c)printf("%d\n",anss);} return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的2019ICPC(南昌) - Fire-Fighting Hero(最短路+思维)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 伊是香蕉大人久久 | 久久久久女教师免费一区 | 国产精品厕所 | 一级精品毛片 | 国产精品一区二区三区四区视频 | 精品人妻互换一区二区三区 | 在线免费观看黄视频 | 涩涩在线播放 | 日韩在线观看你懂的 | 99久久久无码国产精品性 | 欧美综合亚洲图片综合区 | 日本a视频在线观看 | 97色伦影院| 亚洲欧洲天堂 | 在线午夜 | 成人欧美在线观看 | 免费av网站在线播放 | japanese国产在线 | 欧美三日本三级少妇三99 | 久草视频国产 | 亚洲区视频在线观看 | 天天婷婷| 精品国自产在线观看 | 黄色av小说在线观看 | 欧美高清日韩 | 久久只有这里有精品 | 白丝动漫美女 | 欧美一区二区三 | 亚洲蜜桃精久久久久久久久久久久 | www.xxx.国产 | 成人毛片网站 | 亚洲av片不卡无码久久 | 九九热视频在线观看 | 人人干免费 | av大片在线观看 | 久久影视中文字幕 | 国产精品第 | 息与子五十路翔田千里 | 欧美极品少妇xxxxⅹ裸体艺术 | 欧美一级淫片aaaaaa | av免费入口| 国产老头户外野战xxxxx | 巨乳中文字幕 | 国产成人精品国内自产拍免费看 | 国产一区免费视频 | 国产毛片一区二区三区 | 国产三级视频在线播放 | 韩国精品在线观看 | 欧美一卡二卡三卡 | 99国产精品视频免费观看一公开 | 亚洲污视频 | 毛片在线观看视频 | 久久国产在线视频 | 朝桐光av在线 | 久久久精品人妻av一区二区三区 | 亚洲视频456| 亚欧美精品 | 99精品福利视频 | 国产欧美精品区一区二区三区 | 欧美一级片免费看 | 天堂中文字幕在线观看 | 亚洲美女一区二区三区 | 日本一区免费视频 | 亚洲国产精一区二区三区性色 | 高h调教冰块play男男双性文 | 成年人视频免费 | av男人的天堂av | 香港三级韩国三级日本三级 | 色综合天天 | 国产一级视频免费观看 | 国产成人精品一区二 | 中国国产精品 | 欧美亚洲影院 | 色呦呦| 美女在线网站 | 成人av免费观看 | 久久久久久亚洲精品中文字幕 | 日本在线看 | 99re国产 | 男女高h视频 | 欧美午夜在线观看 | 国产精品久久AV无码 | 美女黄污网站 | 91欧美亚洲 | 91热爆视频 | 伊人久久大香线蕉综合网站 | 日本不卡免费在线 | 色诱av| 亚洲一区二区三区日韩 | 在线看片中文字幕 | 天天草av | 求欧美精品网址 | 久久久久一区 | 五月天一区二区 | 波多野结衣片子 | 国产麻豆一级片 | 天堂视频一区二区 | 67194成人 | jizz成熟丰满老女人 |