第一次嘗試使用markdown文字,可能編輯不好,見諒咕咕咕
題目咳咳下面步入正題,關於這種題目,看到的第一眼應該能想到相當於動規的遞推,但是要求邊界如果直接dfs,30000的資料不知道你家的棧能不能受的住
所以這個題目提供了乙個很好的思路,就是先求出拓撲序然後反過來乙個乙個求,這樣可以保證求當前節點資料時(小於等於30000不用longlong)所用到的節點都以經算好了,就這麼簡單
你好好考慮過動歸方程了嗎?
f(x)=並(所有f(y)的並,存在有向邊(x,y))
為甚不是加??
因為有可能會有重複。比如3->4,2->4那直接加起來,4就會算兩次
怎麼破??
狀壓用n位二進位制數,反之乙個點到其他點只有能與不能
1就是能唄,2就是不能唄
實現:陣列實現(不夠裝逼)
bitset!
一直不知道bitset怎麼用
今天先碼幾個唄( 嚶嚶嚶 )
1:定義
bitset《大小》名稱
bitset《大小》名稱[陣列大小]
2:運算
假設有bit[30001]
可以直接賦值bit[1][1]=1;
或者bit[1]="10011"; 注意是字串,前面補0
就是第乙個1位為1
可以直接bit[1]|bit[2] (全部按位或)
2019.12.15 20.14--------------------
3:複雜度
bitset 就是通過固定的優化,使得乙個位元組的八個位元能分別儲存 8 位的 0/1 。4:成員函式對於乙個 4 位元組的 int 變數,bitset 占用空間只是其1/32,計算一些資訊時,所需時間也是其1/32。 --**
賺啊 滑稽
.count()返回1的個數
其實還有很多,但最多用的(狀壓中)也就是這個了吧
——————————
下面也就是狀壓的常規操作了,也沒啥好說的了。下面到了最快樂的
code time
//ch2101
#include#include#includeusing namespace std;
#define n 30005
bitsetbit[n];
queueq;
struct xxe[n];int hd[n],num;
inline void add(int fm,int to)
int topo[n],d[n],cnt;
int n,m;
void tp()
}}int main()
tp();
for(int i=cnt;i;i--)
}for(int i=1;i<=n;i++) cout/ char c=getchar();
return 0;
}
bitset 用法整理
建構函式 bitsetb b有n位,每位都為0.引數n可以為乙個表示式.如bitset 5 b0 則 b0 為 00000 bitsetb unsigned long u b有n位,並用u賦值 如果u超過n位,則頂端被截除 如 bitset 5 b0 5 則 b0 為 00101 bitsetb s...
bitset用法整理
bitset用法整理 2008 01 17 14 15 建構函式 bitsetb b有n位,每位都為0.引數n可以為乙個表示式.如bitset 5 b0 則 b0 為 00000 bitsetb unsigned long u b有n位,並用u賦值 如果u超過n位,則頂端被截除 如 bitset 5...
bitset 用法整理
建構函式 bitsetb b有n位,每位都為0.引數n可以為乙個表示式.如bitset 5 b0 則 b0 為 00000 bitsetb unsigned long u b有n位,並用u賦值 如果u超過n位,則頂端被截除 如 bitset 5 b0 5 則 b0 為 00101 bitsetb s...