网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月07日
漏签
0
天
noip吧
关注:
25,167
贴子:
642,109
看贴
图片
吧主推荐
视频
游戏
11
回复贴,共
1
页
<<返回noip吧
>0< 加载中...
求问这个错误是什么意思?
只看楼主
收藏
回复
yuyangwdhy
省选酱油
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我写的noip2012 疫情控制代码,运行之后就这样了。
这是什么情况?(百度了一下,好像是说不兼容。。。。)
灰天飞雁
进队爷
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
指针操作炸了,或者爆栈
长沙掌途网络科技
熊胆粉-查下自己是否有熊胆粉问题,立即点击测试一下您的健康程度,35题3分钟自测,在线测试分析您的身体情况如何,立即自测...
2025-03-07 23:49
广告
立即查看
yuyangwdhy
省选酱油
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
noip2012 疫情控制
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn=5e4;
int n,sa,sr=0;
int up[maxn+10][15+2],s[maxn+10];
LL len[maxn+10][15+2];
bool flag[maxn+10];
struct tnode{
int d,length;
tnode *next;
}*h[maxn+10];
struct node{
int d;
LL length;
}qr[maxn+10],qa[maxn+10];
int getin()
{
int ans=0;char tmp;
while(!isdigit(tmp=getchar()));
do ans=(ans<<3)+(ans<<1)+tmp-'0';
while(isdigit(tmp=getchar()));
return ans;
}
void add(int u,int v,int w)
{
tnode *p=new tnode;
(*p).d=v,(*p).length=w;
(*p).next=h[u],h[u]=p;
}
void build_tree(int rt)
{
tnode *p=h[rt],*q;
if((*p).d==up[rt][0])
h[rt]=(*p).next,delete(p),p=NULL;
else
for(q=(*p).next;q!=NULL;p=q,q=(*q).next)
if((*q).d==up[rt][0])
{
(*p).next=(*q).next,delete(q),q=NULL;
break;
}
int k,i,j;
for(p=h[rt];p!=NULL;p=(*p).next)
{
k=(*p).d,up[k][0]=rt,len[k][0]=(*p).length;
for(i=1;i<=15;i++)
{
j=up[k][i-1];
if(up[j][i-1]==0)break;
up[k][i]=up[j][i-1];
len[k][i]=len[k][i-1]+len[j][i-1];
}
build_tree(k);
}
}
bool cmp_qr(node a,node b)
{
return a.length<b.length;
}
bool dfs(int rt)
{
if(flag[rt])return 1;
if(h[rt]==NULL)return 0;
tnode *p=h[rt];
while(p!=NULL)
{
if(!dfs((*p).d))return 0;
p=(*p).next;
}
return 1;
}
bool check(LL st)
{
int i,j,x; LL y;
memset(flag,0,sizeof(int)*(n+10));
for(sa=0,i=2;i<=n;i++)if(s[i])
{
x=i,y=st;
for(j=15;j>=0;j--)
if(up[x][j]>1 && y>=len[x][j])
y-=len[x][j],x=up[x][j];
y-=len[x][0];
if(up[x][0]==1 && y>0)
for(j=1;j<=s[i];j++)
qa[++sa].d=x,qa[sa].length=y;
else flag[x]=1;
}
sort(qa+1,qa+sa+1,cmp_qr);
for(i=1;i<=sr;i++)flag[qr[i].d]=dfs(qr[i].d);
for(i=1,j=1;i<=sa && j<=sr;i++)
{
if(!flag[qa[i].d]){flag[qa[i].d]=1;continue;}
while(j<=sr && flag[qr[j].d])j++;
if(qa[i].length>=qr[j].length)
flag[qr[j].d]=1,j++;
}
for(;j<=sr;j++)if(!flag[qr[j].d])break;
return j>sr;
}
int main()
{
int m,i,k,u,v,w;
LL l=1,r,mid,sum=0;
n=getin();
for(i=1;i<=n;i++)h[i]=NULL;
for(i=1;i<n;i++)
{
u=getin(),v=getin(),w=getin();
add(u,v,w),add(v,u,w),sum+=w;
}
for(m=getin(),i=1;i<=m;i++)k=getin(),s[k]++;
build_tree(1);
tnode *p=h[1];
while(p!=NULL)
{
qr[++sr].d=(*p).d;
qr[sr].length=(*p).length;
p=(*p).next;
}
sort(qr+1,qr+sr+1,cmp_qr);
if(check(0)){printf("0\n");return 0;}
for(r=sum;l<=r;)
{
mid=(l+r)/2;
if(check(mid))r=mid-1;
else l=mid+1;
}
if(l>sum)printf("-1\n");
else printf("%I64d\n",l);
return 0;
}
BillXu2000
初识程序
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
自己对拍啦……不要贴代码……
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示