比賽的時候看錯題目了,還以為是這個錢可以向兩邊流,結果,樣例怎麼不對啊!!!!
原來錢,只能向後流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號點只需要有一條邊練過來就好...