河南工業「玲瓏杯」 魔法寶石(spfa或者暴力)

2021-07-31 17:02:40 字數 1883 閱讀 4717

一道偽裝圖論題,比賽連題都沒看,哎,真是想想就氣。

題目描述

小s想要創造n種魔法寶石。小s可以用ai的魔力值創造一棵第i種魔法寶石,或是使用兩個寶石合成另一種寶石(不消耗魔力值)。請你幫小s算出合成某種寶石的所需的最小花費。

輸入第一行為資料組數t(1≤t≤3)。

對於每組資料,首先一行為n,m(1≤n,m≤10^5)。分別表示魔法寶石種類數和合成魔法的數量。

之後一行n個數表示a1到an。(1≤ai≤10^9)。a_i表示合成第i種寶石所需的魔力值。

之後n行,每行三個數a,b,c(1≤a,b,c≤n),表示乙個第a種寶石和第b種寶石,可以合成乙個第c種寶石。

輸出每組資料輸出一行n個數,其中第i個數表示合成第i種寶石的魔力值最小花費。

樣例輸入

1 3 1

1 1 10

1 2 3

樣例輸出

1 1 2

可以看出是求每個合成寶石的最小魔力值,不過這裡是有些兩個寶石可以另乙個寶石,故我們只要對這些求一下是直接製造這個寶石魔力值小,還是用兩個寶石合成魔力值小。所以,tm可以暴力

第一種暴力寫法:

#include

#include

using

namespace

std;

const

int max = 1e5 + 10;

typedef

long

long ll;

ll dis[max];

ll a[max],b[max],c[max];

int main(void)

for(int i=1;i<=n;i++)

}if(!checked) break;//如果這一圈沒有更新,就直接跳出

}for(int i=1;i<=n-1;++i)

cout

<< dis[i] << " ";//這裡要注意輸出格式,最後一位數後面不能有空格

cout

<< dis[n] << endl;

}return

0;}

第二種spfa演算法 :

#include

#include

#include

#include

#include

using

namespace

std;

const

int max = 1e5 + 10;

typedef

long

long ll;

bool used[max];//用來標記這個點是否在佇列中

struct edge;

ll dis[max];

vector

g[max];

int main(void)

for(int i=1;i<=n;i++)

cin >> dis[i];

ll a,b,c;

edge e;

for(int i=1;i<=m;i++)

e.b = b;e.to = c;//注意這裡要用鄰接表存兩個邊

g[a].push_back(e);

e.b = a;e.to = c;

g[b].push_back(e);

}while(!q.empty())}}

q.pop();

used[k] = false;

}for(int i=1;i<=n-1;i++)

cout

<< dis[i] << " ";//輸出格式

cout

<< dis[n] << endl;

}return

0;}

魔法寶石 spfa

時間限制 2 秒 記憶體限制 64 mb 提交 248 解決 48 提交 狀態 題目描述 小s想要創造n種魔法寶石。小s可以用ai的魔力值創造一棵第i種魔法寶石,或是使用兩個寶石合成另一種寶石 不消耗魔力值 請你幫小s算出合成某種寶石的所需的最小花費。輸入 第一行為資料組數t 1 t 3 對於每組資...

2023年 河南工業大學校賽 C題 魔法寶石

時間限制 2 秒 記憶體限制 64 mb 提交 582 解決 187 題目描述 小s想要創造n種魔法寶石。小s可以用a i的魔力值創造一棵第i種魔法寶石,或是使用兩個寶石合成另一種寶石 不消耗魔力值 請你幫小s算出合成某種寶石的所需的最小花費。輸入第一行為資料組數t 1 t 3 對於每組資料,首先一...

河南工業大學2017「玲瓏杯」程式設計競賽 04

時間限制 1 秒 記憶體限制 128 mb 提交 186 解決 101 提交 狀態 題目描述 rqy在和妹子約會,突然女票打來 rqy騙女票他在寫 女票為了證實,問他鍵盤上f鍵左邊是哪個鍵。你能否幫助rqy回應女票的質問?不然他可就要寫思想匯報了.輸入 輸入資料第一行是乙個整數 t 1 t 1000...