24/7/2012 ICPC培训 第九天

ACM-ICPC培训资料汇编 立即下载

又来吐吐糟啦。。。

今天还算顺利,总共刷出了5题。

前两题是并查集,就是昨天没搞定的奋斗。后面三题都是最短路径了。

 

简单说说这几题吧。

关于并查集的两题其实都是卡在了路径压缩的处理上。很坑爹的说。其实也就是在路径压缩时

利用数组记录下一些信息。在需要的时候在合理的计算出来。

其实,挺难理解的抓狂。。。

我也只是一知半解了。。。

 

第一题(HDU1829)

主要是判断两个人是否在同一连通分量的同一层次上。那个计算层次的两个公式,较难理解。

代码:

#include<iostream>
#include<cstring> 
using namespace std;

const int maxn=2001;

int father[maxn],layer[maxn],numBug,actionBug;
bool flag;

void init()
{
    memset(layer,0,sizeof(layer));
     
    for(int i=1;i<=numBug;i++)
    {
        father[i]=i;
    }
}

int find(int x)
{
    if(x!=father[x])
    {
        int tmp=father[x]; 
        father[x]=find(father[x]); 
        layer[x]=(layer[x]+layer[tmp])%2;
    }
    
    return father[x]; 
}

void combine(int x,int y)
{
    int fx=find(x);
    int fy=find(y);
    
    if(fx==fy)
    {
        if(layer[x]==layer[y])  flag=true;      
    }
    else
    {
        father[fx]=fy;
        layer[fx]=(layer[x]+layer[y]+1)%2; 
    }
}

void deal()
{
    flag=false;
    
    int x,y;
    for(int i=1;i<=actionBug;i++)
    {
        scanf("%d%d",&x,&y);
        if(!flag) combine(x,y);
    }
}
        
int main()
{
    int cas,t=1;
    
    scanf("%d",&cas);
    while(cas--)
    {
        scanf("%d%d",&numBug,&actionBug);
        
        init();
        
        deal();
        
        printf("Scenario #%d:\n",t++);
        if(flag) printf("Suspicious bugs found!\n\n");
        else printf("No suspicious bugs found!\n\n");
    }
    
    system("pause"); 
    return 0;
}

 

第二题(HDU3635)

这题的难点在于求ball的转移次数。

暴力解法是每次Q A时都暴力找到和A同祖先的ball,然后把转移次数加一,O(n^2)的算法,TLE了。

另外的解法就是在路径压缩时利用路径压缩的特点来解,难点也就是这个了。

如果你是我的祖先,你的转移次数加上我的转移次数才是我的转移次数,否则你早已不是我的祖先

了。只有直接转移祖先路径才不会被压缩,否则压缩。

代码:

#include<iostream>
#include<cstring>
using namespace std;

const int maxn=10001;

int father[maxn];
int transport[maxn];
int numBall[maxn]; 
int N,K,t=1;

int find(int x)
{
    if(x!=father[x])
    {
        int temp=father[x];
        father[x]=find(father[x]);
        transport[x]+=transport[temp];
    }
    
    return father[x];
    
    //if(x==father[x])
    //{
    //    return x;
    //}
    
    //return father[x]=find(father[x]);
}

void combine(int x,int y)
{
    int fx=find(x);
    int fy=find(y);
    
    if(fx==fy) return;
    
    father[fx]=fy;
    transport[fx]++;
    numBall[fy]+=numBall[fx];
}

void init()
{
    memset(transport,0,sizeof(transport));
    
    for(int i=1;i<=N;i++)
    {
        father[i]=i;
        numBall[i]=1;
    }
} 

void inputAndQuary()
{
    int i,a,b;
    char ch;
    
    printf("Case %d:\n",t++);
     
    for(i=0;i<K;i++)
    {
        getchar();    
        scanf("%c",&ch);
        
        if(ch=='T')
        {
            scanf("%d%d",&a,&b);
            
            combine(a,b);
        }
        else
        {
            scanf("%d",&a);
            
            int tmp=find(a);
            printf("%d %d %d\n",tmp,numBall[tmp],transport[a]);
        }
    }
}                      
            
int main()
{
    int cas;
    
    scanf("%d",&cas);
    while(cas--)
    {
        scanf("%d%d",&N,&K);
        
        init();
           
        inputAndQuary();
    }
    
    system("pause");
    return 0;
}

 

后面三题全是最短路径问题。(HDU2066、2544、1874)

还都是用SPFA算法来解的。代码都非常相似,我就放在一次讲啦。

不过,问题时我用模板过了2066、2544,却卡在了1874,数次WA呀。。。

这就让我纠结了。

神马情况呀。前面都过了。

找这种错误是最难的,最纠结的。因为我认为木有问题呀。从逻辑到数据都是经过检验的呀。

花了很长时间,一直忍着没找度娘。功夫不负有心人呀。最后发现模板中有一个函数的代码

有问题惊恐,就这样也过了2066、2544。。。这数据没的说了。。。

代码:

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;

const int maxn=1001;
const int INF=0x7fffffff;

struct node
{
    int to;
    int cost;
};

vector<node> myV[maxn];  //利用临界表存储图 
int numRoad,numFrom,numTo; //路径数、可以开始的地点数、想去的地点数 
int minPath[maxn],canFrom[maxn],wantTo[maxn]; //最短路、可以出发的城市、想去的城市 
bool inQ[maxn];  //是否入队 

/*
  有bug的函数 
bool judgeExistAndSmall(int a,int b,int time)
{
    bool flag=false;
    
    for(int i=0;i<myV[a].size();i++)
    { 
        if(myV[a][i].to==b)
        {
            if(myV[a][i].cost>time)
            {
                myV[a][i].cost=time;
                flag=true;
                break;
            }
        }
    }
    
    if(flag)
    {
        for(int j=0;j<myV[b].size();j++)
        {
            if(myV[b][j].to==a)
            {
                myV[b][j].cost=time;
                break;
            }
        }
    }
    
    if(flag) return true;
    return false;
}
*/

bool judgeExistAndSmall(int a,int b,int time)
{
    bool flagExist=false,flagSmall=false;  //路径是否存在、存在的路径是否更小 
    
    for(int i=0;i<myV[a].size();i++)
    { 
        if(myV[a][i].to==b)
        {
            flagExist=true; 
            if(myV[a][i].cost>time)
            {
                myV[a][i].cost=time;
                flagSmall=true;
                break;
            }
        }
    }
    
    if(flagSmall)  //双向图,只有存在的路径更小才需要处理 
    {
        for(int j=0;j<myV[b].size();j++)
        {
            if(myV[b][j].to==a)
            {
                myV[b][j].cost=time;
                break;
            }
        }
    }
    
    if(flagExist) return true;   //只要存在路径就返回true 
    return false;
}
     
void inputItial()
{
    int i,a,b,time;
    
    for(i=0;i<maxn;i++)  //清空再使用 
    {
        myV[i].clear();
    }
    
    for(i=0;i<numRoad;i++)
    {
        scanf("%d%d%d",&a,&b,&time);
        
        if(!judgeExistAndSmall(a,b,time))  //无向图、判断是否存在了路、存在的路是大是小 
        {
            node tmp;
            tmp.cost=time;
            
            tmp.to=b;
            myV[a].push_back(tmp);
            
            tmp.to=a;
            myV[b].push_back(tmp);          
        }
    }
    
    for(i=0;i<numFrom;i++)
    {
        scanf("%d",&canFrom[i]);
    }
    
    for(i=0;i<numTo;i++)
    {
        scanf("%d",&wantTo[i]);
    }
}
        
void SPFA()   //最短路径快速算法 Shortest Path Faster Algorithm
{
    int minCost=INF;
    
    for(int i=0;i<numFrom;i++)
    {
        memset(inQ,false,sizeof(inQ));
        for(int j=0;j<maxn;j++)
        {
            minPath[j]=INF;
        }
        minPath[canFrom[i]]=0;
        
        queue<int> myQ;
        myQ.push(canFrom[i]);
        inQ[canFrom[i]]=true;
        
        int now,to,cost;
        while(!myQ.empty())
        {
            now=myQ.front();
            myQ.pop();
            
            for(int k=0;k<myV[now].size();k++)
            {
                to=myV[now][k].to;
                cost=myV[now][k].cost+minPath[now];
                if(minPath[to]>cost)
                {
                    minPath[to]=cost;
                    
                    if(!inQ[to])
                    {
                        inQ[to]=true;
                        myQ.push(to);
                    }
                }
            }
            
            inQ[now]=false;
        }
        
        for(int kk=0;kk<numTo;kk++)
        {
            minCost=min(minCost,minPath[wantTo[kk]]);
        }
    }
    
    printf("%d\n",minCost);
}
     
int main()
{
    while(scanf("%d%d%d",&numRoad,&numFrom,&numTo)==3)
    {
        inputItial();
        
        SPFA();
    }
 
    system("pause");   
    return 0;
}


 

最后,到这么晚才写实在不好意思。

看电视的说大笑。。。

 

 

 

 

 

ACM ICPC培训资料汇编 2 8 哈工大ACM-ICPC培训资料汇编2-8合集,acm复习专业资料 立即下载

相关推荐

OpenCV安装配置教程VS2022(超级顺利)

博主最开始没打算写这篇博客,只是想简单的在网上找一下最新版的OpenCV的安装配置教程,适用于VS2022的,但是我搜了一早上,也没搜到一个能让我成功安装配置的,看了很多很多文章,根本就没有几篇有用的。所以没办法了,只能自己研究了,于是就整理了这篇博客,希望能帮到和我一样的人,这就是博主一直信奉的利他精神!

weixin_47367099的博客 5万+

北大ACM暑期培训感想

博客从7月17日就没更新了,18日开始参加了半个月的ACM培训,然后一直刷老师课上讲过的题目。智商捉急,现在剩下计算几何这章不想刷了。   收获很多,锻炼了思维,学了几个算法,增加了受虐能力,培养了良好的心理素质。。。   打了沈阳和北京的网络赛,均未打进网络赛。北京赛区有两道水题,另一位队友告诉我思路,我拍代码,第一道水题(用map的)我花了2个小时才AC,只是提交一次就AC了,当时很开心。

wwj_bupt 3553

国内合规开通ChatGPT Plus实操指南:银行卡绑卡与支付全解析

ChatGPT Plus 是 OpenAI 官方推出的高级订阅服务,基于 GPT-4o 多模态大模型提供语音交互、图像理解与长上下文处理能力。其核心使用前提在于完成合规的国际支付绑定,而非网络接入方式。技术原理上,OpenAI 采用 Stripe 支付网关进行风控校验,重点匹配银行跨境权限、卡片类型(仅支持 Visa/Mastercard/Amex 信用卡)、BIN 号段及地理位置一致性。该机制决定了95%的绑卡失败源于银行端配置缺失或卡片不兼容,而非网络问题。实际应用中,PayPal 作为中间支付层可显著

chuannaoxuan4674的博客 2012

23/7/2012 ICPC培训 第八天

今天真的都有点不想写了!!! 上午做一题(HDU1829),没刷出来。下午在做一题(HDU3635),还是没刷出来。。。 这两题都是关于并查集的。题目可以理解,大部分要求都能实现,可是就一直卡在一些细节上! 或者WA,或者狠下心来暴力一把TLE。。。 纠结呀!!!   不过今天还是有收获滴。 今天把上次比赛的题目都搞定啦。感谢唐爽童鞋、张浩然童鞋的指导。 我还发现B题的一个错,标程

ON THE WAY TO GEEK 3484

Ubuntu虚拟机磁盘扩容实战:5分钟搞定gparted分区调整(附常见错误修复)

本文详细介绍了在Ubuntu虚拟机中使用gparted工具进行磁盘扩容的实战步骤。针对常见的交换分区阻碍问题,提供了从禁用交换空间、删除旧分区、调整主分区大小到重建交换分区并更新系统配置的完整解决方案,帮助用户在5-10分钟内安全高效地解决磁盘空间不足的难题。

1a2s3d4f5g的博客 670

Android Geckoview实战:5分钟搞定JS与原生交互(附完整Demo代码)

本文详细介绍了在Android应用中使用GeckoView替代系统WebView,构建稳定高效的JavaScript与原生代码交互桥梁的实战方法。通过WebExtension架构,文章提供了从环境配置、扩展开发到Android端集成的完整步骤,并附有可运行的Demo代码,帮助开发者快速解决混合应用中的兼容性问题。

u5v6w7的博客 940

19/7/2012 ICPC培训 第四天

今天只刷出来三题。 明天下午组内又有测试了,肿么办呀,搜索和DP。 说说今天吧。 这三题都是以前看过但没做出来的题,也根本就没尝试去做,就觉得做不出来! 第一题(HDU4039)。 这题花了6个小时左右。其实,前两个小时代码就搞定了,可是有一处小错,一直TLE呀。 在Floyd()中把两个if判断条件没写好呀。明明算法是对的,可是代码逻辑就是没能那样写出来! 这种错误还很难找!!!

ON THE WAY TO GEEK 4078

保姆级教程:用ROS2 Humble和Nav2从零搭建一个能自主导航的机器人小车(含SLAM建图与避障)

本文提供了一份详细的保姆级教程,指导如何使用ROS2 Humble和Nav2从零搭建一个具备自主导航功能的机器人小车,包括SLAM建图与避障。教程涵盖了硬件组装、ROS2环境配置、URDF模型创建、SLAM建图实战、Nav2导航栈配置以及系统集成调试等关键步骤,适合机器人开发初学者和进阶开发者。

weixin_30329623的博客 492

25/7/2012 ICPC培训 第十天

啦啦啦 又来喽 今天一直在做小生成树问题。总共刷了7题,用来两种算法,prime和kurskal。 而且还都是HDU畅通工程系列的。   上午把prime算法的模板谢了出来,然后用模板刷了三题。 HDU1863、HDU1233、HDU1879 由于代码神似呀,这里只贴1863的代码了。 代码: #include #include #include using namespace

ON THE WAY TO GEEK 3880

YOLOv11的流形学习压缩:局部线性嵌入(LLE)引导的特征降维,实现在CSP模块中嵌入流形结构保持约束

摘要 本文探讨了流形学习在YOLOv11目标检测模型中的应用,重点研究局部线性嵌入(LLE)方法对CSP模块的特征压缩优化。针对深度学习模型的高维特征冗余问题,LLE通过三个关键步骤实现非线性降维:寻找k近邻、计算重构权重和低维嵌入,相比传统PCA方法能更好地保持数据的局部结构。文章详细分析了LLE的数学原理和参数选择策略,并提出在YOLOv11的CSP模块中嵌入流形约束的创新设计。通过特征分割前、处理过程和融合阶段引入流形一致性损失函数,该方法能在降低特征维度的同时保持原始流形结构,从而提升模型的计算效率

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1380

【知识分享】CAN总线中终端网络的重要性

P沟道和N沟道晶体管的漏源通态电阻匹配良好时,形成的CANH和CANL信号匹配良好;如果驱动器的一半具有比另一半低得多的导通状态电阻,那么总线共模电压将从VCC/2的显性状态偏离,并回到VCC/2的隐性状态,这将导致每一次状态转换都会伴随着共模电压噪声,从而导致更高水平的传导和辐射能量发射。

一只豌豆象的博客 1547

21/7/2012 ICPC培训 第六天

今天本来安排刷DP的,可是各种不懂呀!!!勉强刷出两道题! 眼看没做出题,还是刷两道二分查找吧。 其他的就是讲解了昨天下午的比赛题目。各种思路,搞得我甚是膜拜。每种思路都很简洁, 把需要解决的问题抽象的很好很好。为啥我就不能想出来呢???无语吆。。。 不过膜拜归膜拜,有了思路得在这两天把没做出来的几题刷了。 最后,晚上,张浩然同学给我们简单介绍了下STL。   还是来讲讲我做的题吧。

ON THE WAY TO GEEK 2963

NeRF-Pytorch(训练自己的数据集过程全记录+环境配置+COLMAP+问题解决)

写于2025/1/26,在用NeRF训练自己的数据集过程中该踩的坑都踩过了,发现网上并没有详细完整写这些问题解决过程的帖子,遂自己进行一个全记录和复盘。 整篇文章包括:NeRF训练环境配置;COLMAP三维重建过程(直接给出代码,规避一些bug);在训练时候出现的问题。 本篇文章仅针对llff格式数据集。

m0_62577716的博客 1774

20/7/2012 ICPC培训 第五天

今天是第二次内部比赛。 共六题,刷出来两题。都是搜索。排在第二名,第一刷出3题,然后有好几个刷出2题的。 还需努力呀!(明天看过结题报告后再把题目、代码、测试数据传到共享里) 另外,今天还刷了HDU上的2题,依旧都是搜索。明天开始做DP了。大神说要从背包开始。 第一题(HDU1181) 题目意思很好懂。就是输入一系列单词,每个单词的首尾字母可以到达,问是否能从b->m。 我的做法是

ON THE WAY TO GEEK 2847

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

22/7/2012 ICPC培训 第七天

又来吐糟了啦。。。 今天照样刷出来的题不多。勉强也只能算个三题半吧!   上午在做上次比赛的B题。 要用数据结构,vector和deque。也第一次感受到了数据结构的魅力,的确把时间复杂度优化的很好。 按照出题者的思路写出了代码,TLE了。结果你懂得,各种纠结,再也想不到如何优化了。。。 然后,就在刚才,把出题人-—唐爽童鞋的代码拿来,居然也TLE了。神马情况。   快到中午,眼看

ON THE WAY TO GEEK 2846

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

26/7/2012 ICPC培训 第十一天

又来喽 汇报下今天吧 上午就写了个强连通算法,tarjan算法,其实还是不太理解的,就是按葫芦画瓢。。。 刷了HDU上的一强连通模板题1269,就是判断有向图是否是连通的,也就是判断连通分量是否 只有一个。 代码: #include #include #include using namespace std; const int maxn=10001; bool inStack[m

ON THE WAY TO GEEK 1732

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

1/8/2012 ICPC培训 第十七天

有两天没写喽,最近状态不太好,。。。 还是以前的老问题,老是感觉自己不咋的,快没机会了,开学就大三了,也在HDU上做了 400+题了,可是的确不咋的呀。比赛一直不好,身边一群大一,都不错,唯独几个大二, 大部分是我同班同学,高我若干数量级。。。 怎么说呢。这就是我喜欢干的事,就是喜欢AC,即使我再做400+,甚至1000+,也不见得 能咋的,打快金牌回来,希望微乎其微。但我还是喜欢,这不

ON THE WAY TO GEEK 1576

18/7/2012 ICPC培训 第三天

今天看了五题,刷出来四题。各种无语呀! 首先看第一题吧。(HDU1217) 这题花了整整一上午,就快4个小时了。结果还是在百度的配合下搞定的! 本以为是简单的字符串操作,首先的想法也就是那样的。结果才发现根本的不对。然后用深搜, 结果TLE。当然,深搜也是错的。因为,一次搜索一个节点只能用一次!或许可以用多次。题目 没规定。最后,还是度娘帮着解决了。Floyd算法,三重for循环。当然,

ON THE WAY TO GEEK 1439

27/7/2012 ICPC培训 第十二天

眨眼培训就过了大半喽。我还是很喜欢的。。。 上午做了HDU2112 还是求最短路径的,不同的是这题没有直接给地点标号,需要我们来处理。 这题要注意一下集中情况: 1、start、end地点在下面的路径中不一点会出现,所以在标号时需要对这两个点也处理。 2、无向图的处理可能会增加时间复杂度,但不会改变最短路径的长度,因为除非是负权边, 否则a->b被处理过,b->a一点不会被处理了。

ON THE WAY TO GEEK 1210

29/7/2012 ICPC培训 第十四天

又来喽 嗯,昨天给自己放了一天假哈,所以也就没啥好些的了。 今天呢,上午刷了一题,外加写了SPFA算法的代码实现,包括打印最短路径。下午呢, 刷了一题。并且,这两题都是SPFA求解最短路径相关的。晚上,就是大神来上课了, 不过几乎听不懂的说,所以也就没听了。。。   第一题(HDU1385),也就是上次做了一天没A的。 最后在建图的时候采用了反向建图,莫名奇妙就A了。为什么反向建图,

ON THE WAY TO GEEK 1152

16/7/2012 ICPC培训 第一天

这是我首次参加此类培训。心里还是有点小激动的。 据说明天下午培训内部会有一场小比赛,希望自己给力呀。 汇报下今天吧: 1、看了4道题,刷了3道题。 其中,前2道是上午做出来的。 第一道是水题(HDU1201),讲究的是对一些基本知识的把握,没有啥太难的算法。 第二题是01背包(HDU1203),和往常不一样的是这里算的是概率,还要反着想。你要算至少拿到 一个学校的offer最大概率,

ON THE WAY TO GEEK 1068

17/7/2012 ICPC培训 第二天

今天上午看了两题,刷出来一题,耗时两个小时。另外那题也花了一个半小时。 1、刷掉的题(HDU1212)。 这题是求模。不过数会很大。我用的是处理字符串,找规律。一步步缩小数。 主要思想就是:用一个字符串数组存下那个大数。然后从后到前每8位取成一个int数(字符串到整数的 转换),存放在一个整型数组内。然后依次对这个整型数组求模。要注意的是,整型数组从后向前第一 位要模b一次,第二位两次,

ON THE WAY TO GEEK 1042

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 351

把 KV Cache 压到 FP4:BitDecoding-FP4 的算法-系统协同设计复盘

长上下文推理卡在KV Cache的显存与带宽上,而现有FP4方案要么精度崩、要么速度废。这篇文章复盘BitDecoding-FP4如何用三个算法补丁加一个系统重构,在B300上把服务吞吐提升2.4–3.0倍,精度几乎不掉。

helloagent的博客 312

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 333
上一篇: 23/7/2012 ICPC培训 第八天
下一篇: 25/7/2012 ICPC培训 第十天
lulipeng_cpp
博客等级 码龄15年 169粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值