摸底測試c題
給n個點,並且每個點有三個值,x,y,z,連線兩點u,v之間的花費為min(|xu−xv|,|yu−yv|,|zu−zv|) ,求將n個點連起來的最小花費為多少。
其實就是一道最小生成樹的題,用kluscal演算法來做,和普通的最小生成樹的差別在於任意兩點之間有三個距離值,在用kluscal之前要先處理一下兩點之間的距離。
首先想想kluscal這個演算法,是對兩點之間的邊進行排序然後按照從小到大的順序來取邊並判斷邊是否需要。根據這個思路,首先用乙個結構體陣列,將每個點的序號以及x,y,z的值存下來,然後分別以x,y,z的大小進行三次排序,每次排序之後,相鄰下標的兩點的x(或y,或z)的差值就是這兩點的最小的距離,然後就可以得到3n-3條邊,然後就根據這3n-3條邊用kluscal演算法就可以得到最小生成樹了。
#include
#define ll long long
#define m 200005
using
namespace std;
int n;
struct node1
point[m]
;struct node2
edge[
3*m]
;int parent[m]
;int
find
(int x)
return r;
}bool
cmp1
(node1 a,node1 b)
bool
cmp2
(node1 a,node1 b)
bool
c***
(node1 a,node1 b)
bool
cmp4
(node2 a,node2 b)
ll kruskal()
if(cnt==n)
break;}
return ans;
}int
main()
sort
(point+
1,point+
1+n,cmp1)
;for
(int i=
1;i<=n-
1;i++
)sort
(point+
1,point+
1+n,cmp2)
;for
(int i=
1;i<=n-
1;i++
)sort
(point+
1,point+
1+n,c***)
;for
(int i=
1;i<=n-
1;i++
) ll ans=
kruskal()
;printf
("%lld"
,ans)
;return0;
}
慈溪中學摸底測試
首先咱一開始並沒有看到 q 的資料範圍,並且子任務 裡還有一堆 none 於是整個機房都打算阿了出題人 後來滾回來看的時候 bug 基本都修好了,於是開始撓頭髮 這個資料範圍真是要人命啊 q 居然可以到 2e9 但後來看到了這個 m 的範圍比較小,於是估計這道題就是利用 m 比較小的性質來做的 於是...
零基礎摸底測試
linux系統,使用者密碼檔案是 絕對路徑 linux系統,組賬號的檔案是 絕對路徑 一條命令實現從root使用者切換到tiechu使用者並切換到其家目錄 鎖定tiechu使用者密碼的命令 檢視系統核心版本的命令是 檢視系統版本號的命令是 vim編輯工具裡,如果想把全部的 hello 換成 worl...
摸底測試C 分拆素數和
把乙個偶數拆成兩個不同素數的和,有幾種拆法呢?input 輸入包含一些正的偶數,其值不會超過10000,個數不會超過500,若遇0,則結束。output 對應每個偶數,輸出其拆成不同素數的個數,每個結果佔一行。sample input30 260sample output3 2 題解 對每個數枚舉,...