這一道題有點難度
我們可以想到,我們可以列舉最高樓房。
那麼需要的費用就是:所有比它高的樓房的錢數和+比它矮的但又不得不刪掉的錢數和。
前面那乙個很簡單就可以求出來,後面那乙個我們可以用堆來做。
首先,我們排一下序。
然後我們建乙個堆,先把所有數都加進去。
然後,我們開始從高往低列舉
我們先把當前點前面的點給刪掉。
然後,假如高度等於當前列舉的樓房高度的個數為k,那麼我們就把可以儲存k-1個數全都刪掉。
然後我們算一下su
m=所有
剩下的數
的和。 如果s
um+所
有比它高
的樓房的錢數和
s ,那麼我們就更新ans。
然後,我們再把刪掉的數給加回來(以後還會用到的)。
這裡有乙個問題,就是如果sum乙個乙個算會很耗費時間,所以我們要邊做變加減。
就是在插入乙個數的時候,我們把sum+x(x為當前所插入的點的權值),反之亦然。
#include
#include
#include
using namespace std;
struct node
tr[110000];
int a[110000],b[110000],c[110000],d[110000];
int hz[110000],sum=0,e[110000];int ans=0;
int cmp(const void *xx,const void *yy)
int mymin(int
x,int
y) void up(intx)}
void down(int
x) else
}}void insert(int
x,int id)
void dec(int
x) else
}int main()
qsort(tr+1,n,sizeof(node),cmp);
tr[n+1].h=-1;int temp=0;hz[0]=0;
for(int i=1;i<=n;i++)
dec(c[1]);
int min=999999999;
for(int i=2;i<=n+1;i++)
if(ans+hz[temp]for(int j=1;j<=temp2;j++)
temp=i-1;
}dec(c[i]);
}printf("%d\n",min);
return
0;}
poj2186 解題報告
題意 有一些奶牛,他們之間有互相崇拜的關係,並且這個關係是有傳遞性的,求被所有奶牛崇拜的奶牛數量 題解 先用強連通縮點,把強連通分量縮成乙個點,強連通中的點必然是互相崇拜的,然後再縮點後的圖中找 到出度為零的點,如果這些點的數量大於一,那麼必然沒有解,因為這些點直接沒有互相崇拜關係,如果只有 乙個點...
poj2186 解題報告
題意 有一些奶牛,他們之間有互相崇拜的關係,並且這個關係是有傳遞性的,求被所有奶牛崇拜的奶牛數量 題解 先用強連通縮點,把強連通分量縮成乙個點,強連通中的點必然是互相崇拜的,然後再縮點後的圖中找 到出度為零的點,如果這些點的數量大於一,那麼必然沒有解,因為這些點直接沒有互相崇拜關係,如果只有 乙個點...
poj 2186 強連通縮點
題意 有n只奶牛,奶牛有自己認為最受歡迎的奶牛。奶牛們的這種 認為 是單向可傳遞的,當a認為b最受歡迎 b不一定認為a最受歡迎 且b認為c最受歡迎時,a一定也認為c最受歡迎。現在給出m對這樣的 認為.的關係,問有多少只奶牛被除其本身以外的所有奶牛關注。思路 既然有單向傳遞關係,那麼關係圖可能就形成了...