JSOI2018 絕地反擊

2022-05-07 19:00:08 字數 1411 閱讀 9755

loj

明顯是二分答案.

首先考慮每乙個點在乙個時間內能夠到達的點是乙個圓,那麼如果圓和大圓相離,顯然不行.

現在考慮有交,你取的一定是兩個端點中的乙個,接著你就可以發現這個東西可以網路流.

唯一的問題在於,你需要考慮這段區間外要把這個匹配刪除,那麼可以考慮模擬退流的過程.

#include#include#include#include#include#include#include#include#includeusing namespace std;

#define mp make_pair

#define ll long long

#define re register

typedef pairpii;

#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)

inline int gi()

while(ch>='0'&&ch<='9')

return f*sum;

}const int n=5010,inf = 1e9+10;

const double pi=acos(-1.0),eps=1e-8;

int n,r,x[n],y[n],q;

double nd;

struct nodee[n*n<<2];

struct quesq[n];

int front[n], cnt, s, t, dep[n] ;

void add(int u,int v,int w)

;front[u]=cnt++;

e[cnt]=(node);front[v]=cnt++;

}bool cmp(ques a, ques b)

queueque;

bool bfs()

} }return dep[t];

}int dfs(int u, int flow)

else dep[v] = -1;

} }return 0;

}void del(int u,int v,int &ans)

for(int j=0,i=front[u];i;j=i,i=e[i].nxt)

if(e[i].to==v)

if(!val)return;--ans;

for(int i=front[s];i;i=e[i].nxt)if(e[i].to==u)

for(int i=front[t];i;i=e[i].nxt)if(e[i].to==v)

if(bfs())ans+=dfs(s,inf);

}bool check(double mid)

printf("%.10lf\n",l);

return 0;

}

JSOI2018 軍訓列隊

n n le5 times10 5 個學生排成一排,第 i 個學生的位置為 a i m m le5 times10 5 次命令,每次將編號在 l,r 之間的學生移動到 k,k r l 位置上,每個位置站乙個人,順序自定 無需考慮原來在 k,k r l 位置上的人 每次的代價為每個人移動距離之和。求每...

JSOI2018 防禦網路

題面 題解這道題對我來說意義重大,是我花了很長時間獨立完成的dp。分析題目 給出乙個仙人掌,對於乙個點集 s 把原圖中使他聯通的最小的邊集記做 h s 求 sum h s 從考慮邊的貢獻的思路開始。對於非環邊,假設它把 v 分成了 s 和 t 兩個區域,如果它被使用,當且僅當其中存在兩個點 a,b ...

JSOI2018 潛入行動

題目 我好菜啊,嚶嚶嚶 原來本地訪問陣列負下標不會報 re 或者 wa 甚至能跑出正解啊 這道題還是非常呆的 我們發現 k 很小,於是斷定這是乙個樹上揹包 發現在乙個點上安裝控制器並不能控制這個點,可能需要到父親那邊才能控制這個點,於是我們設 dp i j 0 1 0 1 表示在以 i 為根的子樹裡...