首页 > 其他分享 >2024杭电多校6-11

2024杭电多校6-11

时间:2024-08-07 22:17:19浏览次数:11  
标签:11 杭电多校 maxx suf int max rep 2024 mx

 

 

CODE:

  1 #include<bits/stdc++.h>
  2 #define rep(i,a,b) for(int i=a;i<=b;i++)
  3 #define dwn(i,a,b) for(int i=a;i>=b;i--)
  4 #define MAXN 102501
  5 #define inf 99999999
  6 using namespace std;
  7 typedef long long ll;
  8 inline int read(){
  9     int x=0,f=1;
 10     char ch=getchar();
 11     while(ch>'9' || ch<'0'){if(ch=='-') f=-1; ch=getchar();}
 12     while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
 13     return x*f;
 14 }
 15 int n,m;
 16 int mx[MAXN],mxx[MAXN],vis[MAXN],tmp[MAXN],ans[MAXN],cird[MAXN];
 17 vector<int> v[MAXN],c;
 18 void clr(){
 19     rep(i,1,n) v[i].clear();
 20     c.clear();
 21     rep(i,1,n) mxx[i] = mx[i] = 0;
 22     rep(i,1,n) vis[i] = 0;
 23     rep(i,1,n) tmp[i] = 0;
 24     rep(i,1,n) ans[i] = 0;
 25     rep(i,1,n) cird[i] = 0;
 26 }
 27 void ade(int x, int y){
 28     v[x].emplace_back(y);
 29     v[y].emplace_back(x);
 30 }
 31 int getc(int x,int y){
 32     int res = 0,r;
 33     if(vis[x]) return x;
 34     vis[x] = 1;
 35     for(auto u : v[x]){
 36         if(u == y || tmp[u]) continue;
 37         if(!res){
 38             res = getc(u,x);
 39             if(res) c.emplace_back(x),tmp[x] = 1;
 40             if(res == x) res = 0;
 41         }
 42         else r = getc(u,x);
 43     }
 44     return res;
 45 }
 46 void dfs(int x,int y){
 47     for(auto u : v[x]){
 48         if(tmp[u] || y == u) continue;
 49         dfs(u,x);
 50         if(mx[x] < mx[u] + 1) mxx[x] = mx[x], mx[x] = mx[u] + 1;
 51         else if(mxx[x] < mx[u] + 1) mxx[x] = mx[u] + 1;
 52     }
 53     ans[x] = mxx[x] + mx[x];
 54 }
 55 void df5(int x,int y,int z){
 56     ans[x] = max(ans[x], mx[x] + z);
 57     for(auto u : v[x]){
 58         if(u == y || tmp[u]) continue;
 59         if(mx[u] + 1 == mx[x]) df5(u,x,max(z,mxx[x]) + 1);
 60         else df5(u,x,max(z,mx[x]) + 1);
 61     }
 62 }
 63 void wk1(){
 64     int u,maxx = -inf;
 65     rep(i,0,m-1){
 66         u = c[i];
 67         cird[u] = max(cird[u], maxx + i);
 68         maxx = max(maxx, mx[u] - i);
 69     }
 70     maxx = -inf;
 71     dwn(i,m-1,0){
 72         u = c[i];
 73         cird[u] = max(cird[u], maxx - i);
 74         maxx = max(maxx, mx[u] + i);
 75     }
 76     maxx = -inf;
 77     rep(i,0,m-1){
 78         u = c[i];
 79         cird[u] = max(cird[u], maxx + m - i);
 80         maxx = max(maxx, mx[u] + i);
 81     }
 82     maxx = -inf;
 83     dwn(i,m-1,0){
 84         u = c[i];
 85         cird[u] = max(cird[u], maxx + m + i);
 86         maxx = max(maxx, mx[u] - i);
 87     }
 88 }
 89 int suf[MAXN],pre[MAXN];
 90 void wk2(){
 91     suf[m] = -inf;
 92     suf[m-1] = mx[c[m-1]] + (m-1);
 93     pre[0] = mx[c[0]];
 94     int u;
 95     rep(i,1,m-1) pre[i] = max(pre[i-1], mx[c[i]] - i);
 96     dwn(i,m-2,0) suf[i] = max(suf[i+1], mx[c[i]] + i);
 97     rep(i,1,m-2) ans[c[i]] = max(ans[c[i]], pre[i-1] + suf[i+1]);
 98 }
 99 void wk3(){
100     suf[m] = -inf;
101     suf[m-1] = mx[c[m-1]] - (m-1);
102     pre[0] = mx[c[0]];
103     int u;
104     rep(i,1,m-1) pre[i] = max(pre[i-1], mx[c[i]] + i);
105     dwn(i,m-2,0) suf[i] = max(suf[i+1], mx[c[i]] - i);
106     int maxx = -inf;
107     rep(i,1,m-1){
108         ans[c[i]] = max(ans[c[i]], maxx);
109         maxx = max(maxx, pre[i-1] + mx[c[i]] - i + m);
110     }
111     maxx = -inf;
112     dwn(i,m-2,0){
113         ans[c[i]] = max(ans[c[i]], maxx);
114         maxx = max(maxx, suf[i+1] + mx[c[i]] + i + m);
115     }
116 }
117 void wk(){
118     n = read();
119     rep(i,1,n){
120         int x = read(), y = read();
121         ade(x,y);
122     }
123     int ep = getc(1,0);
124     m = c.size();
125     for(auto u : c) dfs(u,0);
126     wk1();
127     for(auto u : c) df5(u,0,cird[u]); //处理完非环点
128     wk2(); // 处理环点
129     wk3() ;
130     rep(i,1,n) printf("%d ",ans[i]);
131     puts("");
132 }
133 int main(){
134     int T = read();
135     while(T--){
136         clr();
137         wk();
138     }
139     return 0;
140 }

 

标签:11,杭电多校,maxx,suf,int,max,rep,2024,mx
From: https://www.cnblogs.com/handsome-zlk/p/18347962

相关文章

  • JSOI2024 游记
    UPD:其实是早就写好了的,不过现在差不多想发了。JSOI2024游记Day?~Day-1省选前的心态算是比较失落,每次点人都发现自己进不了一点。不过今年还是得打,尽力而为吧。比赛前一周基本补完了之前落下的联考,打的还算可以。湖北省选模拟,打了个Day2,非常没有水平的100+100+43,感......
  • 2024.8.7鲜花
    夏日重现,补完力!前年追到了18集,后因该死的集训被迫中断,但还是偶尔在机房与Ryder共赏,剧透了潮复活的情节,今夕是何年。可惜曲终人散,各奔东西,转眼间已分别半年,再过三个月我也将与机房断开联系,回归或许枯燥的文化课。牢波,想你了!刚开始接触这部番,是因为我和我姐前年暑假去表哥家玩,我......
  • 2024.08.07 记录一下面试。
    这次面试面试官就说我们想要基础好的,所以就问了一堆基础问题。这里的知识点图片都是来自JavaGuide,如果不是图片我会贴一下链接,但是很有可能我都不会解答。Java面试指南|JavaGuide按我能想到的写。1.手动获得spring配置文件application.yml文件。......
  • 2024年8月6日 加训
    2024年8月6日加训赛时只过了C。D有思路,不过没写。ACF1969E2402*把一个数修改之后,显然直接把序列拆成两个部分。找出所有的\((\text{prev}(i),\text{next}(i))\),那么所有合法区间都是包含\(i\)的子区间。然后考虑dp划分,f[i]表示前缀\(i\)最少需要几次修改,转移就......
  • HDU 多校 2024 Round 2
    A-鸡爪肯定是希望\(1,2,3\)的度数尽可能多。考虑答案一定是\(\lfloor\dfrac{n}{3}\rfloor\),所以把前面\(1\sim\lfloor\dfrac{n}{3}\rfloor\)都作为鸡爪的中心,并且向\(1,2,3\)连边。剩下一些再连到\(1,2\)上面去。B-梦中的地牢战斗建分层图跑最长路,由于没有正环,所......
  • [20240807]数值累加的问题.txt
    [20240807]数值累加的问题.txt--//前几天遇到一位朋友聊天提到的问题,实际上主要讲现在要招熟悉linux,unix类的人很少,我接触国内大部分开发人员熟悉了解linux--//很少,即使是数据库管理人员,熟悉linux类的人很少,顶多会一个安装就已经不错了,基本上许多操作系统命令是非常不熟练......
  • 2024.8.7 模拟测
    A(P7968[COCI2021-2022#2]Osumnjičeni)考虑对于一次询问直接从左往右划分段,直至当前加入的人与前面某个人的身高有交集,则新开一个段。设\(nx_i=j\)表示从第\(i\)个人开始划分,要到第\(j\)个人才会出现冲突(若永远不会冲突则让\(nx_i=n+1\))。一次询问相当于初始时让......
  • 博客摘录「 MD5原理」2024年8月3日
    ,MD5消息摘要算法(英语:MD5Message-DigestAlgorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16个字符(BYTES))的散列值(hashvalue),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(RonaldLinnRivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在......
  • 错误 C1128 节数超过对象文件格式限制: 请使用 /bigobj 进行编译
    错误C1128表示生成的对象文件(通常是.obj文件)中包含的节数超过了链接器的限制。这通常发生在项目包含大量代码或使用了大量模板时。解决方法是在编译时使用/bigobj选项。这个选项允许对象文件包含更多的节,从而避免这个错误。在VisualStudio中,可以通过以下几种方式......
  • 2024.8.7 test
    A一个基环树上,给出每条边可以存在的时间,你还有\(L\)的时间可以分配给边。你要安排边开始存在的时间,使得联通的时间最长,求这个值。\(n\le10^5\)。先不考虑\(L\)。如果是树,那么答案是边存在时间的最小值。如果是基环树,那么把环上次小边加上最小边,并删掉最小边,变成树求最小边......