NOIP提高 錢倉

2021-07-16 12:50:45 字數 900 閱讀 1398

比賽的時候看錯題目了,還以為是這個錢可以向兩邊流,結果,樣例怎麼不對啊!!!!

原來錢,只能向後流tat

貪心

那麼直接貪心就好了。

每個錢為0的點,因為是單方向流動的,所以肯定是最近的那個點流過來的。

所以先找出乙個合法的初始節點,滿足每個零都會被前面的點填滿。

維護每乙個非零的點的左邊乙個非零的點,其實每次暴力列舉就好了。

然後把這個非零的點把當前這個零點填成1。

複雜度o(n)

#include

#include

#include

#include

#include

#define fo(i,a,b) for(i=a;i<=b;i++)

#define fod(i,a,b) for(i=a;i>=b;i--)

using

namespace

std;

const

int maxn=100007;

int j,l,t,n,m,r;

long

long ans,a[maxn*2],i,k;

int b[maxn],c[maxn],ll[maxn];

int sqr(int x,int y)

int main()

n*=2;

fo(i,1,n)

}fod(i,l+n/2-1,l)if(a[i]>0)

fod(i,l+n/2-1,l)}}

printf("%lld\n",ans);

}

NOIP2016提高A組8 11 錢倉

發現,一定有乙個點作為起點,所有的路徑都不經過這個起點。接著貪心求答案,如果c i 1 將其中ci 1個錢往後 鋪 易證x 2 y2 x y 2 那麼維護乙個佇列,先進先出,就能保證最小。include include include include include include include ...

NOIP2016提高A組8 11 錢倉

發現,一定有乙個點作為起點,所有的路徑都不經過這個起點。接著貪心求答案,如果 c i 1 將其中 c i 1 個錢往後 鋪 易證 x 2 y 2 x y 2 那麼維護乙個佇列,先進先出,就能保證最小。include include include include include include in...

NOIP提高 通訊

tarjan縮點 互相到達的兩個點,就是在同乙個強連通分量裡面的點的邊權都沒有用了。那麼明顯可以用tarjan來縮點。需要串上n個點 那麼這個東西很像乙個最小生成樹,可惜不是。那麼我們另闢蹊徑。既然要保證每個點都在的出的圖中,那麼最優的方案就只有n 1條邊,那麼每個除了1號點只需要有一條邊練過來就好...