ACM 天梯賽賽前複習

2021-09-12 17:19:57 字數 2099 閱讀 1710

dag :有向無環圖

入度:指向這個元素的行為。

出度:從這個元素指出去的行為。

正向建圖與反向建圖:根據入度或出度的某一方嚮往最後的答案陣列中放元素。

hdu4857

思路:利用每個元素的入度(出度)來首先拿出乙個元素,然後根據這個元素相關的向量來(1)先把相關的入度(出度)都減一,(2)遍歷一遍看有沒有元素的入度(出度)為零的。(3)為零了再push進入佇列中,這道題結合優先佇列反向建表的原因就是題幹中有數字小的在前。

(易錯:每次對於向量陣列的清空(clear()),因為這個原因wa了一次。)

#include

#include

#include

#include

#include

#define maxn 30050

using namespace std;

vector<

int>b[maxn]

;//對每個與自己相關的元素放入乙個空間內,對那個空間的進行遍歷

//向量陣列,用於儲存每個和自己相關的元素

priority_queue<

int>q;

int out_num[maxn]

;//本題用出度來運算

int ptotal,nodetotal;

int ans[maxn]

;//最終答案陣列

intmain

(int argc,

char

const

*ar**)

memset

(out_num,0,

sizeof

(out_num));

memset

(ans,0,

sizeof

(ans));

// cin>>ptotal>>nodetotal;

scanf

("%d%d"

,&ptotal,

&nodetotal)

;int s,t;

for(

int i =

1; i <= nodetotal;

++i)

int u=0;

for(

int i =

1; i <= ptotal;

++i)

}while

(!q.

empty()

)}}for

(int i = ptotal-

1; i >=0;

--i)

// else coutprintf

("%d "

,ans[i]);

}}return0;

}

#include

using namespace std;

// int a[12][12];

// int mark[12][12]

bool check

(int x;

int y)

void

dfs(

/*控制迭代的東西*/

int m,

int n)

//check成立之後應該改變標記條件

//進入下一層dfs()這次的應該就是下一層的座標。/其他情況就是下一層的迭代的層數。

//如果從dfs中(上一層的dfs)跳出=>就要把原來的標記條件改回去。}}

}int

main

(int argc,

char

const

*ar**)

並沒有用到遞迴的思想,而是像擴散一樣將附近的所有情況都走完了,再繼續往外擴散。儲存資料的東西是佇列,如果想記錄路徑就需要在結構體中寫乙個引數來記錄走的步數(擴散的長度),最後可以通過乙個棧來通過結構體中的那個記錄走的步數的引數來回溯找到路徑。

bfs  //一般都結合佇列=>而push進佇列的都是結構體

//一般會來乙個結構體

struct node

;void

bfs(

int can1,

int can2,)}

}}

ACM 天梯賽賽前複習

寒假集訓被學校巨佬們震撼 苦心刷題,終於有空在天梯賽前把板題湊合整理一下,賽前來波自我安慰 hdu 2199 wa了兩次,第二次再做時沒有審清題,題目鎖定了答案在0到100之間,其餘的輸出為no solution!然而預設只有小於零才輸出。還有注意資料型別 double ac include inc...

天梯賽賽前模擬賽補題 2020

一 暢通工程之最低成本建設問題 這道題是用最小生成樹做的,之前最小生成樹練的很少,比賽時沒寫出來,也沒考慮用最小生成樹,還是練得少。這個題可以用kruskal演算法做,先將每條路的花費從小到大排序,然後再從頭開始加每條邊花費的 從頭開始用並查集判斷兩個點的根節點是否相同,如果相同說明出現了環,就co...

PTA天梯賽樹的複習

先序遍歷 根左右 中序遍歷 左根右 後序遍歷 左右根 給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。輸入格式 輸入第一行給出乙個正整數n 30 是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三行給出其中序遍歷序列。數字間以空格分隔。輸出格式 在一...