bzoj3669

news/2024/12/22 13:29:17/

对于这道题的解法,感觉是部分暴力,枚举带几只A型守护精灵,就可以将这道题转化成求类似于bzoj2594了。

参考题解:

http://wenku.baidu.com/view/a611cec4dd3383c4bb4cd2d8.html

http://www.cnblogs.com/JoeFan/p/4451249.html

找错时深刻体会到老师讲的静态测试能找出一半的错。

(昨天把手机电池摔坏了,借别人的手机定闹钟,结果因为重新开了下机,手机时间12点左右,正常时间11点左右,所以造成定的6点多的闹钟,抬头看外面黑暗暗的,就决定继续睡,还想着,今天太累了,实在起不来,结果后来发现真相的我眼泪掉下来大哭

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define N 50010
#define M 100010
#define INF 0x3f3f3f3fstruct node{node *fa;node *ch[2];int rev;int val;int valnum;int maxval;int maxvalnum;int from;int to;void init(int tempval,int tempvalnum,int tempfrom,int tempto){ch[0]=ch[1]=fa=NULL;rev=0;val=tempval;valnum=tempvalnum;maxval=val;maxvalnum=valnum;from=tempfrom;to=tempto;}bool isroot(){return fa==NULL||(fa->ch[0]!=this&&fa->ch[1]!=this);}void fswitch(){rev^=1;swap(ch[0],ch[1]);return;}void push_down(){if(rev){if(ch[0]){ch[0]->fswitch();}if(ch[1]){ch[1]->fswitch();}rev=0;}return;}void go(){if(!isroot()){fa->go();}push_down();return;}int dir(){return fa->ch[1]==this?1:0;}void setedge(int d,node *another){ch[d]=another;if(another){another->fa=this;}return;}void push_up(){maxval=val;maxvalnum=valnum;if(ch[0]){if(maxvalnum<ch[0]->maxvalnum){maxvalnum=ch[0]->maxvalnum;maxval=ch[0]->maxval;}}if(ch[1]){if(maxvalnum<ch[1]->maxvalnum){maxvalnum=ch[1]->maxvalnum;maxval=ch[1]->maxval;}}return;}void rot(){int d=dir();node *tempfafa=fa->fa;if(!(fa->isroot())){tempfafa->ch[fa->dir()]=this;}fa->setedge(d,ch[!d]);setedge(!d,fa);fa=tempfafa;ch[!d]->push_up();return;}void splay(){go();while(!isroot()){if(!(fa->isroot())){dir()==fa->dir()?fa->rot():rot();}rot();}push_up();return;}void access(){for(node *p=this,*q=NULL;p;q=p,p=p->fa){p->splay();p->setedge(1,q);p->push_up();}splay();return;}void make_root(){access();fswitch();return;}void cut(node *another){another->make_root();access();ch[0]->fa=NULL;ch[0]=NULL;push_up();return;}void link(node *another){another->make_root();another->fa=this;return;}node *find_root(){node *temp=this;while(temp->fa){temp=temp->fa;}return temp;}bool islink(node *another){return find_root()==another->find_root()?true:false;}int querymax(node *another){another->make_root();access();return maxval;}
};struct edge{int from,to;int ai,bi;
};bool cmp(edge a,edge b){return a.ai<b.ai;
}node *tree[2*N],pool[2*N];
edge edgearray[M];
int cou;void addedge(int x,int y,int w){if(x==y){return;}else{if(tree[x]->islink(tree[y])){int temp=tree[x]->querymax(tree[y]);if(tree[temp]->valnum>w){//把w写成了x,wr了,强调:想着意义写代码,每个代码都是一段故事(文艺版)tree[temp]->cut(tree[tree[temp]->from]);tree[temp]->cut(tree[tree[temp]->to]);tree[temp]->init(temp,w,x,y);tree[temp]->link(tree[y]);tree[temp]->link(tree[x]);}}else{tree[++cou]=&(pool[cou]);tree[cou]->init(cou,w,x,y);tree[cou]->link(tree[x]);tree[cou]->link(tree[y]);}return;}
}int main(){int n,m;scanf("%d%d",&n,&m);if(m==0){//printf("wo shi da hao ren");printf("-1\n");}else{for(int i=1;i<=n;i++){tree[i]=&(pool[i]);tree[i]->init(i,-1,-1,-1);}cou=n;for(int i=0;i<m;i++){scanf("%d%d%d%d",&edgearray[i].from,&edgearray[i].to,&edgearray[i].ai,&edgearray[i].bi);}sort(edgearray,edgearray+m,cmp);int ans=INF;int nowai=edgearray[0].ai;for(int i=0;i<m;i++){if(edgearray[i].ai!=nowai){if(tree[1]->islink(tree[n])){int temp=tree[1]->querymax(tree[n]);if(nowai+tree[temp]->valnum<ans){ans=nowai+tree[temp]->valnum;}}nowai=edgearray[i].ai;}addedge(edgearray[i].from,edgearray[i].to,edgearray[i].bi);}if(tree[1]->islink(tree[n])){int temp=tree[1]->querymax(tree[n]);if(edgearray[m-1].ai+tree[temp]->valnum<ans){ans=edgearray[m-1].ai+tree[temp]->valnum;}}if(ans==INF){printf("-1\n");}else{printf("%d\n",ans);}}return 0;
}


转载于:https://www.cnblogs.com/ahahah/p/4918199.html


http://www.ppmy.cn/news/131386.html

相关文章

poj 3669

bfs的题 因为每次都模拟流行砸下来&#xff0c;tle一次&#xff0c;&#xff08;应该标记每个点被砸的时间&#xff09; 因为没有标记走过的点不能再走&#xff0c;tle了一次&#xff0c;&#xff08;之前认为走过的点应该可以再走&#xff0c;其实仔细想的话&#xff0c;走过的…

ORACLE ASM常用命令整理

ASM 命令整理 一. 查看ASM空间使用情况 1. lsdg: 查看磁盘组的信息&#xff0c;和磁盘空间大小 ASMCMD> lsdg State Type Rebal Block AU Total_MB Free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED EXTERN N 4096 1048576 …

POJ-3669广度优先搜索

这是一道典型的广度优先搜索BFS题目。 首先声明一下&#xff0c;我在这里借鉴了别人的想法&#xff1a;这是原文答案&#xff0c;请点击 题目大意&#xff1a; 流星雨即将攻击地球&#xff0c;当然数目是有限的&#xff0c;共n个&#xff0c;攻击到某个点时将会使该点及其上…

POJ 3669(优先队列BFS)(对地图进行优化)

题目新颖&#xff0c;解法也是比较难想的。 题目&#xff1a; Bessie听说有场史无前例的流星雨即将来临&#xff1b;有谶言&#xff1a;陨星将落&#xff0c;徒留灰烬。为保生机&#xff0c;她誓将找寻安全之所&#xff08;永避星坠之地&#xff09;。目前她正在平面坐标系的…

“3.15”十五个行业大调查:谁在侵害消费者权益?

疫情之后消费复苏&#xff0c;“烟火人间“回归日常。 但是&#xff0c;部分行业的繁华羽翼之下却暗藏斑点&#xff0c;侵害消费者权益的各种乱象丛生&#xff1a; 新餐饮经营异常&#xff0c;食材口感与消费者期望严重不符&#xff1b;厨房小家电价格飘忽不定&#xff0c;参数…

苹果二手报价及图片大全

苹果二手价格一直很多人关注&#xff0c;下面给大家看看最新的二手苹果手机价格。&#xff08;数据来源&#xff1a;换换二手交易平台&#xff09;

最新苹果二手报价单(2022.2.15)

2022.2.15换换回收iPhone苹果二手机报价单(按照内存、靓机、小花、大花、花机四个等级进行报价)如下所示

手机app系统软件开发报价单及方案:费用明细

手机app系统软件开发报价单及方案&#xff1a;费用明细 一般而言&#xff0c;功能报价单是外包合同的附件&#xff0c;是开发范围的约束文件&#xff0c;即使在设计已经基本确定的情况下&#xff0c;有了设计稿或demo&#xff0c;依然应该有一份功能清单。 某种程度上&#xf…