杭電第二場 A Total Eclipse

2021-10-09 14:47:13 字數 857 閱讀 1071

題意:

給定乙個無向圖,每個點有乙個點權

有這樣的操作:選定乙個連通塊(每個點的權大於0),將所有節點的權值減一

求最少的操作次數,使得所有點的權為0

題解:並查集

依照題意,貪心地選最大的連通快,每當有點的權值減為0的時候可能會使得連通塊斷裂成多個,我們要維護這個過程

但是這樣做會tle

那我們逆向進行這個過程:

1.權最大的點最後稱為割點,所以我們按權值從大到小進行

2.當前的點為x,列舉x的所有鄰接點y,如果y權比x大,就用並查集維護連通關係

具體上,我們並查集的頂點設為當前連通快中權值最小的點,每次連線fa[y]=x, ans+=val[y]-val[x];

3.最後判斷有多少個並查集,答案加上並查集頂點的權值

#includeusing namespace std;

const int maxn=1e5+5;

int cnt,head[maxn],to[maxn<<2],nxt[maxn<<2];

int a[maxn],f[maxn],v[maxn],p[maxn];

long long ans;

void add(int x,int y)

bool cmp(int x,int y)

int find(int x)

int main()

for(int j=1;j<=n;j++)

} for(int i=1;i<=n;i++)v[i]=0;

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

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

} return 0;

}

2019杭電多校第二場

今天也是一條鹹魚orz 場上三題 e,j,k e everything is generated in equal probability 題解 乙個長度為n的排列的逆序期望為c n,2 2 因為每一對下標的貢獻都是1 2.然後設dp i dp i dp i 為長度為i ii的隨機排列的culcul...

2019杭電多校第二場

給定乙個 n 從 1,n 中等概率取出乙個數,再等概率生成乙個 n 的全排列,再計算這個全排列的函式值,求這個函式值的期望。函式表達為輸入乙個全排列,計算其逆序數,再等概率取出乙個子串行 可以是空,可以是原序列 遞迴計算該子串行的函式值,累加返回。include using namespace st...

2018暑假杭電多校第二場

問了yxz後做的。這個是我一般寫線段樹的方法,才覺得感覺有點麻煩,還是yxz的寫法安逸些 include bits stdc h define out x cout x typedef long long ll const ll maxn 5e5 5 int n,m int b maxn struc...