JSOI2015 最小表示

2022-05-21 23:24:06 字數 1114 閱讀 3290

題目大意:

盡可能多地去掉乙個有向無環圖上的邊,使得圖的連通性不變。

思路:拓撲排序,然後倒序求出每個結點到出度為$0$的點的距離$d$,再倒序遍歷每乙個點$x$,以$d$為關鍵字對其出邊降序排序,嘗試加入每一條邊,若加邊之前兩點已經連通,則說明這條邊可以刪去。可以用bitset維護圖的連通性,注意原圖是有向圖,因此不能用並查集維護。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 inline int

getint()

15const

int v=30001

;16 std::vectore[v];

17 inline void add_edge(const

int u,const

intv)

20int

n;21

intin[v]=,top[v]=;

22 inline void

kahn()

27int cnt=0;28

while(!q.empty()) 37}

38}39}

40struct

vertex

45};

46vertex v[v];

47int dis[v]=;

48int ans=0

;49 inline bool cmp(const

int x,const

inty)

52 inline void

dp() ;55}

56 std::sort(&v[0],&v[n],std::greater());

57for(int i=0;i) 63}

64}65 std::bitsetbit[v];

66 inline void

cut() 76}

77}78int

main()

85kahn();

86dp();

87cut();

88 printf("

%d\n

",ans);

89return0;

90 }

JSOI2015 染色問題

傳送門 雖然不是第一反應,不過還是想到了要容斥。題意轉化 需要求滿足 n m c 個條件的方案數。然後我們就列舉三個數 i,j,k 表示當前方案中,至少不用 k 種顏色,至少不塗 i 行 至少不塗 j 列。然後直接組合數算 式子不難看懂 最後容斥即可。那麼寫出來就是 ans sum n sum m ...

JSOI2015 子集選取

傳送門 看到這個資料範圍,就知道肯定是要找規律。如果把集合看成乙個長度為 n 的 01 串,0 表示沒有這個元素,1 表示有這個元素,那麼我們可以發現對於題中的約束關係,不同位上的 01 之間不會互相影響。那麼我們只需要對於只有一位也就是 n 1 的情況計算出方案 記為 x 那麼最後的答案就是 x ...

JSOI2015 染色問題 題解

傳送門 容斥原理 把三個容斥套一起 我們列舉至少有i ii行沒有染色,至少j jj列沒有染色,至少k kk種顏色沒有用到,那麼剩下 n i m j n i m j n i m j 個格仔每個都有c 1 k c 1 k c 1 k種選擇 可以在剩下c k c kc k種顏色中挑一種,也可以不染色 因此...