題解 JSOI2015 地鐵線路

2022-05-07 22:09:16 字數 1076 閱讀 1661

兩問分開考慮

對於第一問, 每條線路建乙個點, 線路上的站點向該點連一條 1 的邊, 該點向線路上的點連一條 0 的邊

直接最短陸即可

對於第二問

假設代表某條線路的點 \(i\) 的 \(dis\) 為 \(d\)

那麼他所連線的站點要麼 \(dis\) 為 \(d\), 要麼 \(dis\) 為 \(d-1\)

由於這條線路是一條直的, 只用取 \(dis\) 為 \(d - 1\) 的字首和字尾的 \(max\) 即可

#include #include #include #include #include #include #include const int n = 8e5 + 5;

const int inf = 0x3f3f3f3f;

using namespace std;

int m, n, dis[n], head[n], cnte, cnt, p[n], len[n], s, t, pre[n], nxt[n], f[n];

struct edge e[n << 1];

string s;

vectorvec[n];

dequeq;

mapmp;

template < typename t >

inline t read()

while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();

return x * w;

}inline void adde(int u, int v, int w) , head[u] = cnte; }

void bfs() }}

bool cmp(int x, int y)

void calc() }}

int main()

} cin>>s, s = mp[s], cin>>s, t = mp[s];

bfs(), calc();

printf("%d\n%d\n", dis[t], f[t]);

return 0;

}

題解 JSOI2015 圈地

發現一種地要麼歸 a 要麼歸 b 若相鄰兩塊歸屬不同還有額外代價 那麼 a 買就連源點,b 買就連匯點 總收益加上這些值 中間連代價的雙向邊 答案為總收益減去最小割 include include include include include include const int n 160005 ...

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種顏色中挑一種,也可以不染色 因此...

題解 JSOI2015染色問題

好像這個容斥還是明顯的。一共有三個要求,可以用組合數先滿足乙個,再用容斥解決剩下的兩個維。反正這題資料範圍這麼小,隨便亂搞都可以 用 a k i 表示使用 k 種顏色,至少有 i 列沒有染色的方案數,可以容斥預處理得到使用 k 種顏色染色使得每行每列均被染色的方案數。然後再容斥一下保證每種顏色都用上...