兩問分開考慮
對於第一問, 每條線路建乙個點, 線路上的站點向該點連一條 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 種顏色染色使得每行每列均被染色的方案數。然後再容斥一下保證每種顏色都用上...