非常帶勁之計算幾何
寫的頭暈= =
就是平面圖轉對偶圖然後最小割
由於p非常小我們列舉所有保護狀態然後割一下
建圖真的煩 就是把區域劃分出來看一下每乙個古蹟點是否被小區域包含【好像也可以寫點定位】
然後我好像判左右叉積又雙叒叕的寫反了?
整個畫出圖來然後發現好像沒建錯圖= = 然後把!刪掉竟然過了= =於是愉快改成onright= =
區域劃分就是雙向直線然後每次找反向的極角的最近的就可以了 可以畫個圖大概就是這個樣子
紅的就是反向邊 找的就是藍色的 找一圈就一定會找回來
然後別忘了記錄那個外邊的無限平面
寫起來帶勁2333
//love and freedom.
#include#include#include#include#include#include#include#define inf 20021225
#define ll long long
#define db double
#define eps 1e-8
using namespace std;
#define mxm 200000
#define mxn 1100
struct poi
poi(db _x,db _y)
};typedef poi vec;
vec operator +(vec a,vec b)
vec operator -(vec a,vec b)
vec operator *(vec a,db b)
db cross(vec a,vec b)
db value(vec a)
db len(vec a)
struct line
line(poi _p,vec _v)
};bool onright(poi p,line l)
vectore[mxn];
poi spc[mxn],stk[mxn];
bool v[mxn],out[mxn];
int n,m,p,bel[mxn];
line li[mxm];
bool cmp(int a,int b)
void find(int tmp,int id)
while(start!=now);
for(int i=1;i<=p;i++) if(v[i]) bel[i]=id;
if(area>0) out[id]=1;
}int ed,blk;
struct edge
edge(int _x,int _y,int _w)
}e[mxm];
int ecnt;
int ans[mxn];
struct edge;
struct maxflow
void add(int x,int y,int f)
bool bfs()
}return false;
} int dfs(int x,int flow)
}dis[x] = -1;
return flow-cur;
} int dinic()
int build(int state)
for(int i=1;i<=ecnt;i++)
return one;
}}flow;
int main()
for(int i=1;i<=n;i++) sort(e[i].begin(),e[i].end(),cmp);
for(int i=1;i<=ed;i++) if(!li[i].flag) find(i,++blk);
for(int i=1;i<=ed;i++) e[++ecnt] = edge(li[i].flag,li[li[i].another].flag,li[i].w);
//for(int i=1;i<=ed;i++) printf("%d %d\n",i,li[i].flag);
memset(ans,48,sizeof(ans));
int top=(1<
//for(int i=1;i<=p;i++) printf("%d\n",bel[i]);
for(int i=1;i
for(int i=p;i;i--) ans[i]=min(ans[i],ans[i+1]);
for(int i=1;i<=p;i++) printf("%d\n",ans[i]);
return 0;
}
bzoj 3203 保護出題人
題意 在乙個詭異的植物大戰殭屍遊戲中,給出n關 第i關隊首殭屍距房門xi,兩個殭屍之間間隔為d 每次在隊首新增乙個血量為ai的殭屍,其他殭屍不變 每關在門前放乙個攻擊力任意的植物,求n關放置植物總攻擊力的最小值 n 100000,其他資料 10 12 題解 題意敘述略詭異。建議還是去看一眼原題 首先...
SDOI2013 BZOJ3203 保護出題人
description input 第一行兩個空格隔開的正整數n和d,分別表示關數和相鄰殭屍間的距離。接下來n行每行兩個空格隔開的正整數,第i 1行為ai和 xi,分別表示相比上一關在殭屍佇列排頭增加血量為ai 點的殭屍,排頭殭屍從距離房子xi公尺處開始接近。output 乙個數,n關植物攻擊力的最...
BZOJ3203 SDOI2013 保護出題人
bzoj luogu 題面不太好簡化就不放了qaq。先對殭屍的血量做乙個字首和,然後在第 i 關中視第 j 只殭屍 j le i 的血量為 a i a 這樣就可以當作是開了穿牆掛,可以一直攻擊每乙隻殭屍直至其死亡。考慮最優策略,一定是某乙隻殭屍在剛好走到門前的時候把他打死。也就是算出打死每乙隻殭屍所...