NOI(P)2013模擬 秘密任務

2021-07-10 00:11:31 字數 1795 閱讀 3896

這題是在最短路上研究問題的,所以理所當然要建個圖先。

其次我們先考慮費用,看看這圖,再yy一下,那麼我們可以發現這就是典型的最小割問題,可是我們還是要考慮如何判斷這個割是否唯一。

首先,大家可以先去看我的另乙個blog,上面有寫類似這樣的判斷最大流是否唯一。

其實這兩題是不同的。。。所以我在考試時就掛了。。

因為這題比較特殊,不是一般的網路流(這個自己體會一下吧。。不好說。)

但是我們知道也有一些條件是一定要滿足的比如說

某些邊流滿的邊且左右兩邊屬於s和t集的原流量和一定是原最大流的值,即所有屬於割集的邊的流量和是否為原最大流,這是來預防兩條連續滿流的邊

另乙個條件是一條一定是割集的邊一條邊的兩個節點的費用一樣,那麼這也是有多解的

#include

#include

#include

#include

#include

#include

using namespace std;

typedef long long ll;

const int n=405;

const int m=4005;

char cher[10],chee[10];

ll x[m],y[m],e[m*2],er[m*2],n,m,z[m],val[n],nu,b[m*2],las[n],nex[m*2],dis[n],l,r,a[m*2],v[m*2],tot[n],re[m*2],t,ty[m][3],q[n][n];

bool bz[n];

void add(int x,int y,int z,int k)

bool pd()

return tot[n];

}int ditch(int x,ll y)}}

return we;

}int bed[n];

void dfs(int x,int z)

int main()

memset(dis,127,sizeof(dis));

memset(bz,0,sizeof(bz));

l=0;r=1;a[1]=1;bz[1]=1;dis[1]=0;

while (l

for(int p=las[a[++l]];p;p=nex[p])

}bz[a[l]]=0;

}memset(las,0,sizeof(las));val[n]=2000000007;

int cnt=0;nu=1;

for(int i=1;i<=m;i++)

ll ans=0;

while (pd()) ans+=ditch(1,4005000000000);

memset(bed,0,sizeof(bed));

dfs(1,0);

dfs(n,1);

ll sum=0,pew=0;

for(int i=1;i<=nu;i++)

if ((!(i&1))&&(bed[b[i]]==2&&bed[e[i]]==1)&&!v[i])

cher[0]='y',cher[1]='e',cher[2]='s';chee[0]='n';chee[1]='o';

if (sum!=ans)

if (pew) printf("%s %lld\n",chee,ans);else printf("%s %lld\n",cher,ans);

}}

模擬 NOIP 2013 花匠

花匠棟棟種了一排花,每株花都有自己的高度。花兒越長越大,也越來越擠。棟棟決定把這排中的一部分花移走,將剩下的留在原地,使得剩下的花能有空間長大,同時,棟棟希望剩下的花排列得比較別緻。具體而言,棟棟的花的高度可以看成一列整數h 1,h 2,h n。設當一部分花被移走後,剩下的花的高度依次為g 1,g ...

NOIP2013模擬 粉刷匠

給出n個球,其中有c1個球是顏色1的,有c2個球是顏色2的,有c3個球是顏色3的 有ck個球是顏色k的。求相鄰兩個球顏色不同的排列方案。k 15,ci 6,資料組數 2000 這種題一般很難有直接的通式,可以考慮dp。設fi,j表示,前i中顏色已經放完了,其中產生了j個不合法的空的方案數。這裡的空指...

NOIP2013模擬 Rainbow的訊號

time limits 1000 ms memory limits 131072 kb special judge description freda發明了傳呼機之後,rainbow 進一步改了傳呼機傳送資訊所使用的號。由於現在是數字 資訊時代,rainbow 發明的訊號用 n個自然數表示。為了避免...