Professional Documents
Culture Documents
Graph
Graph
https://thptchuyen.ntucoder.net/ckfinder/userfiles/files/Z
EROPATH.pdf
Link submit thì mình k bt
#include<bits/stdc++.h>
#define el cout<<"\n"
//vector<int>a[maxn];
int d[maxn];
for(int x=1;x*x<=u;++x){
if(u%x==0){
int m=(x-1)*((u/x)+1);
if(!d[m]){
d[m]=1;
dfs(m);
int main(){
int n;
cin>>n;
set<int>ans;
for(int i=0;i<n;++i){
d[i]=0;
d[0]=1;
dfs(n);
for(int i=0;i<maxn;++i){
if(d[i]==1){
ans.insert(i);
}cout<<ans.size();el;
for(auto x:ans){
cout<<x<<" ";
Ý tưởng bài này mình đọc được từ 1 video của anh Yugihacker về dfs trên youtube
Nx: theo mình đánh giá đây giống 1 bài đệ quy bình thường thôi nhưng nếu suy nghĩ
theo kiểu đồ thị thì cũng dễ hiểu và dễ suy nghĩ
Đầu tiên sẽ suy nghĩ như có 1 đồ thị với các đỉnh là nghiệm của bài toán các cạnh là
các bước để có thể ra được các đỉnh(các đỉnh k có sẵn mà phải tự mình tìm ra)
Các bạn nên tư duy giống cái cây trên video của anh yugi nhé
S1:Đặt tất cả các đỉnh có thể là nghiệm là 0(nếu là nghiệm thì là 1 và lúc sau trace sau)
S3:dfs(u):
+giống như kiểm tra snt thì khi ta duyệt các ước chỉ đến sqrt(u) *hiểu đơn giản rằng
sqrt(u) là khoảng giữa các ước của u
*x là ước của u
+đánh dấu đã có m thông qua d và tiếp tục tìm các nhiệm khác có thể tạo từ m và tiếp
tục đến khi nào m=0 thì quay lui lên và tìm các trường hợp khác
S4:Truy vết các bạn cứ chạy đến tối đa của n(1e4) chẳng sao