一道偽裝圖論題,比賽連題都沒看,哎,真是想想就氣。
題目描述
小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...