EDITORIAL
それでも自閉症ゲーム
T1グッズコレクション
アイデア
使用するプライオリティキューを
例えば、サンプル
4 7
5 5 2
1 3 2
1 2 7
1 4 5
(面白い、独自のポイントを右に(追加してください。
右側には、キューに投入されたポイントを通過することができます。
だから、最初の品物を収集するために、3、5に行って、私たちは2の値を強制する必要があります
製品は、総貨物7品を収集するために、4、2に行っているのに十分ではありません、我々は値5を強制する必要があります。貨物は十分に、答えは5です。
コード
namespace Sol{
struct node{
int v,to,net;
}e[maxn<<1];
int n,M,tot,ans,cnt;
int head[maxn],a[maxn];
bool vis[maxn];
priority_queue<pair<int,int> >q;
inline void add(int x,int y,int z){
e[++tot].v=y; e[tot].to=z;
e[tot].net=head[x]; head[x]=tot;
}
inline int Main(){
n=read(); M=read();
for(int i=2;i<=n;i++) a[i]=read();
for(int i=1;i<n;i++){
int x=read(),y=read(),z=read();
add(x,y,z); add(y,x,z);
}
vis[1]=1;
for(int i=head[1];i;i=e[i].net){
int y=e[i].v;
vis[y]=1;
q.push(make_pair(-e[i].to,y));
}
while(ans<M){
int x=-q.top().first;//武力值
int y=q.top().second;//走到的节点
q.pop();
ans+=a[y];//收集到的总货物
cnt=max(cnt,x);//比较武力值
for(int i=head[y];i;i=e[i].net){
int yy=e[i].v;
if(vis[yy]) continue;
vis[yy]=1;
q.push(make_pair(-e[i].to,yy));
}
}
printf("%d",cnt);
return 0;
}
}
T2グッズグループ
アイデア
ここではそこの記事のブログで、私は考えているが、それでも私の定数は、比較的良好な?
ポストはブログなぜ?私は怠け者だから
コード
namespace Sol{
int n,M;
int f[maxn],s[maxn],a[maxn];
int maxx,minn;
inline int Main(){
n=read(); M=read();
for(int i=1;i<=n;i++){
a[i]=read();
s[i]=s[i-1]+a[i];
}
for(int i=1;i<=n;i++){
f[i]=f[i-1]-s[i-1];
maxx=a[i]; minn=a[i];
for(int j=i-2;j>=0&&s[j]>=s[i]-M;j--){
maxx=max(maxx,a[j+1]);
minn=min(minn,a[j+1]);
if(f[i]>f[j]-s[j]+maxx-minn)
f[i]=f[j]-s[j]+maxx-minn;
}
f[i]+=s[n];
}
printf("%lld",f[n]);
return 0;
}
}
地形T3の計算
更新を待って、書きません
[\ mathcal \クワッド終了\ \]
\ [あなたの半分のうち月、まだまだ10代の\]