題意:
給定乙個無向圖,每個點有乙個點權
有這樣的操作:選定乙個連通塊(每個點的權大於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...