洛谷練習P2279 P1346

2021-09-07 07:28:53 字數 2818 閱讀 9265

2023年,人類在火星上建立了乙個龐大的基地群,總共有n個基地。起初為了節約材料,人類只修建了n-1條道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。如果基地a到基地b至少要經過d條道路的話,我們稱基地a到基地b的距離為d。

由於火星上非常乾燥,經常引發火災,人類決定在火星上修建若干個消防局。消防局只能修建在基地裡,每個消防局有能力撲滅與它距離不超過2的基地的火災。

你的任務是計算至少要修建多少個消防局才能夠確保火星上所有的基地在發生火災時,消防隊有能力及時撲滅火災。

輸入格式:

輸入檔名為input.txt。

輸入檔案的第一行為n (n<=1000),表示火星上基地的數目。接下來的n-1行每行有乙個正整數,其中檔案第i行的正整數為a[i],表示從編號為i的基地到編號為a[i]的基地之間有一條道路,為了更加簡潔的描述樹狀結構的基地群,有a[i]輸出格式:

輸出檔名為output.txt

輸出檔案僅有乙個正整數,表示至少要設立多少個消防局才有能力及時撲滅任何基地發生的火災。

輸入樣例#1:

612

345

輸出樣例#1:

2

簡化版問題在於不用考慮根節點一定是了

#include #include 

#include

#include

#include

#include

using

namespace

std;

const

int n=1005

;inline

intread()

while(c>='

0'&&c<='9')

return x*f;

}int

n,v;

struct

edgee[n

<<1

];int h[n],cnt=0

;void ins(int u,int

v)struct

node

bool

operator

<(const node &r)const

};node lst[n];

int p=0

;int

d[n],fa[n],q[n],head,tail;

void bfs(int

s) }

lst[++p]=node(u,d[u]);

}}int

vis[n];

void dfs(int u,int fa,int d)

}int main(int argc, const

char *argv)

bfs(1);

sort(lst+1,lst+1+p);

int ans=0

;

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

printf(

"%d\n

",ans);

return0;

}

在乙個神奇的小鎮上有著乙個特別的電車網路,它由一些路口和軌道組成,每個路口都連線著若干個軌道,每個軌道都通向乙個路口(不排除有的觀光軌道轉一圈後返回路口的可能)。在每個路口,都有乙個開關決定著出去的軌道,每個開關都有乙個預設的狀態,每輛電車行駛到路口之後,只能從開關所指向的軌道出去,如果電車司機想走另乙個軌道,他就必須下車切換開關的狀態。

為了行駛向目標地點,電車司機不得不經常下車來切換開關,於是,他們想請你寫乙個程式,計算一輛從路口a到路口b最少需要下車切換幾次開關。

輸入格式:

第一行有3個整數2<=n<=100,1<=a,b<=n,分別表示路口的數量,和電車的起點,終點。

接下來有n行,每行的開頭有乙個數字ki(0<=ki<=n-1),表示這個路口與ki條軌道相連,接下來有ki個數字表示每條軌道所通向的路口,開關預設指向第乙個數字表示的軌道。

輸出格式:

輸出檔案只有乙個數字,表示從a到b所需的最少的切換開關次數,若無法從a前往b,輸出-1。

輸入樣例#1:

3 2 1

2 2 3

2 3 1

2 1 2

輸出樣例#1:

0
超水最短路一遍ac

#include #include 

#include

#include

using

namespace

std;

const

int n=105,inf=1e9+5

;inline

intread()

while(c>='

0'&&c<='9')

return x*f;

}int

n,s,v,st,ed;

struct

edgee[n*n<<1

];int h[n],cnt=0

;inline

void ins(int u,int v,int

w)int q[n],head=1,tail=1

;inline

void lop(int &x)

intd[n],inq[n];

void

spfa()}}

}}int

main()

}spfa();

if(d[ed]==inf) puts("-1"

);

else printf("%d"

,d[ed]);

}

洛谷 P1346 電車

稍微包裝過一下的最短路。如果初始狀態就是到達那個路口,就把權值搞為0,如果不是就搞為1 然後跑最短路,我用的是spfa,不過100的資料怎麼跑都行吧。include includeusing namespace std const int maxn 100 int n,a,b,k,map maxn ...

洛谷 P1346 電車

題目描述 在乙個神奇的小鎮上有著乙個特別的電車網路,它由一些路口和軌道組成,每個路口都連線著若干個軌道,每個軌道都通向乙個路口 不排除有的觀光軌道轉一圈後返回路口的可能 在每個路口,都有乙個開關決定著出去的軌道,每個開關都有乙個預設的狀態,每輛電車行駛到路口之後,只能從開關所指向的軌道出去,如果電車...

洛谷P1346 電車

在乙個神奇的小鎮上有著乙個特別的電車網路,它由一些路口和軌道組成,每個路口都連線著若干個軌道,每個軌道都通向乙個路口 不排除有的觀光軌道轉一圈後返回路口的可能 在每個路口,都有乙個開關決定著出去的軌道,每個開關都有乙個預設的狀態,每輛電車行駛到路口之後,只能從開關所指向的軌道出去,如果電車司機想走另...