題目鏈結
某兩樣物品之間若滿足某些條件則無法同時獲取,顯然最小割。
這個題其實和bzoj3275幾乎相同。。。
我剛開始蠢蠢的做法,還是拆點,對於點x,s向x』連邊,流量b[i],x」向t連邊,流量為b[i],對於每一對不能同時取得點i,j,連邊i』–>j」,j』–>i」,流量均為inf。答案=(∑b[i]*2-最小割)/2。
看完大神的做法,簡直覺得自己low爆了。
可以證明,任意兩個偶數滿足2
兩個奇數滿足1
(2a+1)^2+(2b+1)^2=2(2a^2+2b^2+2a+2b+1)一定不是完全平方數
那麼,不拆點,將偶數和奇數作為兩個集合即可。
ps:中間過程用longlong。
我的low做法,time:600+ms。
#include
#include
#include
#include
#include
#include
#include
#include
#define n 2005
#define m 2004005
#define inf 1000000001
using
namespace
std;
typedef
long
long ll;
typedef pairpa;
int read()
while(isdigit(ch))
return x*f;
}int n,m,cnt=1,s,t,ans;
int b[m],p[n],nextedge[m],w[m],cur[n];
int level[n],a[1005];
void add(int x,int y,int z)
void anode(int x,int y,int z)
void input_init()
}bool judge(ll x,ll y)
void build_graph()
bool bfs()}}
return level[t];
}int dfs(int x,int maxf)
}if(!rtn) level[x]=0;
return rtn;
}void dinic()
printf("%d\n",ans>>1);
}int main()
用大神的做法,time:200+ms。
#include
#include
#include
#include
#include
#include
#include
#include
#define n 1005
#define m 2004005
#define inf 1000000001
using
namespace
std;
typedef
long
long ll;
typedef pairpa;
int read()
while(isdigit(ch))
return x*f;
}int n,m,cnt=1,s,t,ans;
int b[m],p[n],nextedge[m],w[m],cur[n];
int level[n],a[1005];
void add(int x,int y,int z)
void anode(int x,int y,int z)
void input_init()
}bool judge(ll x,ll y)
void build_graph()
bool bfs()}}
return level[t];
}int dfs(int x,int maxf)
}if(!rtn) level[x]=0;
return rtn;
}void dinic()
printf("%d\n",ans);
}int main()
bzoj千題計畫235 bzoj2448 挖油
一遍過,嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎,o o 題意是最小化最大值 設計區間dp dp i j 表示在能確定x不在區間 i,j 內,或確定x在區間 i,j 內某個位置的最壞情況下的最小值 dp i j min k i,j o n 3 複雜度 include include include using na...
bzoj1923 Sdoi2010 外星千足蟲
luo2447 依然是異或方程組的高斯消元求解,第一問其實就是在高斯消元過程中訪問到的用作主元的方程組的下標最大值,因為異或方程組是直接找到為當前元的係數為 1 的異或方程作為主元進行消元過程的 第二問就是消元之後各個未知數的取值 普通的高斯消元會收穫tle,但是我們可以使用 bitset 可以優化...
bzoj 2827 千山鳥飛絕
time limit 10 sec memory limit 128 mb submit 802 solved 228 submit status discuss 51 1 1 3 1 2 4 4 4 2 0 1 2 2 3 51 1 2 2 4 4 2 4 3 3 0 1 5 0 134 688對...