題目鏈結:
資料範圍:略。
題解:
因為每次只改乙個,改完之後改回去,這個性質很重要。
發現有些葉子更改了之後,整體的答案是不變的,因為會出現:他的父親是$\&$操作但是另乙個兒子是$0$這種...
故此,我們先算出乙個節點都不更改時,每個節點的值。
之後我們通過位運算,對每乙個節點維護乙個$tag$表示這個節點更改會不會影響到根節點。
遍歷即可,細節可以看**。
**:
#include #define n 1000010#define setio(s) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout)
using namespace std;
char s[10];
int opt[n], val[n], ch[n][2];
bool tag[n];
char *p1, *p2, buf[100000];
#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? eof : *p1 ++ )
int rd()
while (c >= '0' && c <= '9')
return x * f;
}void dfs(int p)
else if (opt[p] == 2)
else if (opt[p] == 3)
else if (opt[p] == 4)
else
}void dfs2(int p)
if (rs)
} else
else if (opt[p] == 2)
else if (opt[p] == 3)
else if (opt[p] == 5)
else
} if (ls)
if (rs)
}int main()
if (c == 'i')
else if (c == 'n')
else if (c == 'x')
else if (c == 'a')
else
} // for (int i = 1; i <= n; i ++ )
// puts("");
dfs(1);
// for (int i = 1; i <= n; i ++ )
// puts("");
dfs2(1);
// for (int i = 1; i <= n; i ++ )
// else
// }
for (int i = 1; i <= n; i ++ )
else
} }fclose(stdin), fclose(stdout);
return 0;
}
CF 427D 字尾陣列
題意 求兩串字串的公共最短子串,且這個子串只在任意一串中出現一次 首先明確字尾陣列將所有的字尾 也可以視為第i個點開始的子串 字典序排列,將最近似的子串集合在一起。lcp求的是附近兩個子串的最長公共字首 如果某乙個子串當且僅當出現兩次,則必須是lcp i 是區域性最大。該子串最大長度為lcp i 最...
cf669d 觀察規律
jibancanyang author jibancanyang created time 一 4 25 01 45 31 2016 file name cf669d.cpp problem 觀察規律 get 有規律奇數偶數總是相互間隔,且奇數同奇數相對位置不變,偶數同偶數相對位置不變。說以還是要多...
CF915D 解題報告
此題目洛谷評分錯誤,根本沒有紫題難度。最開始的想法 列舉刪除的每一條邊,做一遍拓撲排序,最後直接暴力得出答案。但是,仔細分析時間複雜度 o m n m 根本過不去,所以想優化。我們可以發現,當有 x 條邊是指向 u 時,我們在上面的演算法流程中就會把每一條邊都列舉一次,列舉 x 次。但仔細想想,對於...