好吧,雖然這是day1最後一題,但卻是最水的一題。。。。(前提:看懂題目)
仔細看題!
仔細看題!
仔細看題!
看懂題後就知道設第$i$個點的兒子節點的個數為$degree[i]$,容量為$a[i]$,我們要修改最少的點的容量,使得每個點$i$的兒子的容量均為$\frac$
我們發現如果乙個點的容量是確定的,那麼整個樹的容量都是確定的
我們記第$i$個點的所有祖先的$degree$的乘積為$p[i]$,如果第$i$個點無需修改,那麼根結點的容量應該為$p[i]*a[i]$
我們要找到最多的點使得$p[i]*a[i]$相同即可
用乙個map維護即可
但是$p[i]$有可能非常大,我們雜湊一下即可
#include#includeview code#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include適用於cf,uoj,但不適用於poj
using
namespace
std;
typedef
long
long
ll;typedef
double
db;typedef pair
pii;
typedef pair
pdd;
typedef complex
cp;typedef vector
vi;#define mmst(a,v) memset(a,v,sizeof(a))
#define mmcy(a,b) memcpy(a,b,sizeof(a))
#define fill(a,l,r,v) fill(a+l,a+r+1,v)
#define re(i,a,b) for(i=(a);i<=(b);i++)
#define red(i,a,b) for(i=(a);i>=(b);i--)
#define fi first
#define se second
#define mp(a,b) make_pair(a,b)
#define pb(a) push_back(a)
#define sf scanf
#define pf printf
#define two(k) (1<
#define sz(x) (int(x.size()))
#define all(x) (x).begin(),(x).end()
#define ire(i,v,x) for(i=0,v=itemplate
inline t sqr(t x)
template
inline void upmin(t &t,t tmp)
template
inline void upmax(t &t,t tmp)
inline
int sgn(db x)
const db pi=acos(-1.0
);int
gint()
for(;z!=eof && isdigit(z);res=res*10+z-'
0',z=getchar());
return (neg)?-res:res;
}ll gll()
for(;z!=eof && isdigit(z);res=res*10+z-'
0',z=getchar());
return (neg)?-res:res;
}const
int maxn=501000
;const ll mod=;
typedef map
,ll>,int>mlll;
intn;
inta[maxn];
ll p[maxn][3];
mlll s;
intnow,info[maxn];
struct tedgeedge[2*maxn];
intdegree[maxn];
intfa[maxn],head,tail,que[maxn];
void addedge(int u,int v);info[u]=now;}
intmain()
re(i,
2,n)degree[i]--;
que[head=tail=1]=1
; re(j,
0,2)p[1][j]=1
;
while(head<=tail)
}re(i,
1,n)re(j,0,2)p[i][j]=p[i][j]*ll(a[i])%mod[j];
re(i,
1,n)s[mp(mp(p[i][0],p[i][1]),p[i][2])]++;
int ans=0
;
for(mlll::iterator it=s.begin();it!=s.end();it++)upmax(ans,it->se);
ans=n-ans;
cout
return0;
}
bzoj 3573 Hnoi2014 公尺特運輸
題目好難懂。簡述題意 給出一棵樹,要求滿足兩個要求 1.每個節點的子節點權值相等。2.每個節點的權值和是這個節點的權值。然後就出最小修改點的數量來滿足這個要求。那麼顯而易見只要確定乙個節點就可以確定群圖節點權值。這樣列舉是 通過這個結論我們發現只要確定1就可以確定全圖,所以可以通過讓每乙個節點權值不...
BZOJ 3573 Hnoi2014 公尺特運輸
bzoj 3573 hnoi2014 公尺特運輸 樹形dp hash 題意 給你一棵樹每個點有乙個權值,要求修改最少的權值,使得每個節點的權值等於其兒子的權值和且兒子的權值都相等。分析 首先我們發現在樹中如果確定乙個點的權值,那麼整顆樹的方案就能夠確定 問題轉化成求哪個方案包含的點最多 如何求包含這...
BZOJ3573 Hnoi2014 公尺特運輸
作者部落格 正解 排序 分析 解題報告 題目給出的各項約束條件,其實就是想告訴我們乙個這樣的模型 每個點的權值 父親節點的權值 父親節點的兒子節點個數,修改盡量少的點權使得滿足要求。然後可以發現,只要確定了乙個點填什麼,整棵樹的點權其實就唯一確定了 考慮兩個點 u v 令 dis x x走到根需要乘...