資料量過大,但是邊數不是很多,稀疏圖,開鄰接表儲存邊,注意使用set來記錄使用的顏色數,pat題目嚴格意義上涉及演算法也不是很多。
#include
#include
#include
#define ac cin.tie(0);cin.sync_with_stdio(0);
using
namespace std;
const
int maxn =
10010
;vector<
int> g[maxn]
;int arr[maxn]
;int n, m, k;
intmain()
cin >> k;
while
(k--
)for
(int i =
0; i < n; i++
)for
(int j:g[i]
)//兩個鄰接點顏色相同,不符合
if(arr[i]
== arr[j])if
(op)
cout << set.
size()
<<
"-coloring"
<< endl;
else
cout <<
"no"
<< endl;
}return0;
}
由於是完全二叉樹,滿足2*k 為節點k的左兒子,2*k+1為節點k的右兒子,所以可以很方便的進行dfs遍歷,同時要求先輸出右邊的路徑,所以優先深度遍歷右兒子,同時最後要求輸出是最大還是最小堆,使用兩個bool變數記錄,如果有乙個兒子比父結點大,就肯定不是大根堆,如果有乙個兒子節點比父結點小,肯定就不是小根堆。
#include
#define ac cin.tie(0);cin.sync_with_stdio(0);
using
namespace std;
const
int maxn =
1010
;//arr為層序遍歷 tmp為儲存的臨時路徑 大小為log(maxn)
int arr[maxn]
, tmp[maxn]
;int n;
bool op1 =
true
, op2 =
true
;void
dfs(
int root,
int k)
cout << tmp[i];}
cout << endl;
return;}
}int
main()
並查集轉換一下輸入,根據愛好建立vector,vector[i]記錄愛好為i的人的編號,然後對愛好i的所有人進行union操作即可。
#include
#include
#include
using
namespace std;
const
int maxn =
1010
;vector<
int> g[maxn]
, ans;
int pre[maxn]
;int n, m, a;
intfind
(int a)
//從大到小排序
bool
cmp(
int&a,
int&b)
intmain()
}for
(int i =
1; i < maxn; i++)}
for(
int i =
1; i <= n; i++)}
printf
("%d\n"
, ans.
size()
);//從大到小排序
sort
(ans.
begin()
, ans.
end(
), cmp)
;for
(int i =
0; i < ans.
size()
; i++
)return0;
}
鞏固不用queue以及遞迴寫寬搜,之後就是簽到題了
#include
#include
using
namespace std;
const
int maxn =
100010
;int arr[maxn]
;vector<
int> g[maxn]
;int n;
double p, r;
intmain()
}int tt =
0, hh =
0, size, cnt;
arr[0]
=0;while
(tt <= hh)
//有根節點就break,找到了最淺的葉子節點
if(cnt)
break;}
printf
("%.4lf %d"
, p, cnt)
;return0;
}
PAT甲級刷題
給定兩個字串s1和s2,刪除s1中在s2 現過的字元設定flag陣列,初始化為0。遍歷s2並將其字元轉化為ascii碼值,並在flag陣列中相應位置值標記為1,表示它出現過。再遍歷s1,若對應字元ascii碼值在flag陣列中相應位置值標記為0,則輸出。就是hash的思想,時間複雜度o len s1...
PAT甲級刷題實錄 1014
這題需要用到佇列,而且不止一條。首先是每個等待視窗各需要一條,另外在黃線外的等待顧客需要一條。c 提供了現成了現成的佇列型別,只要引用標頭檔案queue即可。演算法基本執行過程是 在輸入顧客等待時間時依次填滿每條佇列,超出佇列容量的,即編號大於n m 1的顧客,則push進黃線外的等待佇列中。當有視...
PAT甲級刷題實錄 1008
這題應該是到目前為止最簡單的一道題,評測系統的通過率統計也達到了驚人的0.59。我們需要定義以下用於計算的變數 currentfloor 當前所在的樓層,初始值為0 nextfloor 接下來要前往的樓層,數值通過讀取輸入來確定 totaltime 經過的總時間。因為這題思路實在太簡單了,我也不用自...