2017.8.15暑假集训第十六天(下午训练赛)

今天上午本来在做队列剩下的题、但是老师后来说不用做了。。那个题实在太麻烦了、也没有什么价值、然后我就果断删掉了、、正好看着题解,也做得怪难受的、、

然后就看树状数组的课件、不看课件真的不会做题、看的也还不是十分理解。。思路感觉理解的还可以、代码实现还实现不了

今天下午,练习赛。。做题做的生无可恋,一共A了两道题,第一题,光搜题,再加一层找到4否的判断就可以了。。跟以前的广搜题很类似、

还有最后一个规律题、、一开始,看题没有注意到保留最后九位数就好,一门心思光再找规律。。后来好不容易找到了、一交,WA。。还以为是自己的规律找错了。。后来实在是A不了题了,再加上这个题A的人实在是多。。就继续看。。尝试大数发现输出错误。。然后又回去看题,终于看到了保留后九位,然后。。才A

BC题,我真的是醉了!!不就是最小生成树么?不是这个假期刚做的图论!??!我明明用的一样的方法。。搞不懂,为什么一直WA。。、

后来晚上我又好一通琢磨,都找出原来的代码来了。。改了一下输出,还是WA。。看来是方法错了!然后就搜题解,题解上是跟老师的课件上一种方法——从最小的边开始选择,将联通的路赋相同值。。这种方法确实学过。。但是原来做题用的方法也确实对啊!!

而且我记得有一个题,跟C的题意完全一样,也是找最短路径的最长边。。当时明明是A了的,这次在用。。就WA。。郁闷!!还没想通,两种方法差在哪里。。

最后时间不早了。。就看了一下DE的题意,E题类似。。D题有点难度,一时半会还不知道怎么做。。明天的任务了

AC代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN = 2100;
const int MAXM = 40040;
struct EdgeNode
{
    int from;
    int to;
    int w;
}Edges[MAXM];

int father[MAXN];

int find(int x)
{
    if(x != father[x])
        father[x] = find(father[x]);
    return father[x];
}

int cmp(EdgeNode a,EdgeNode b)
{
    return a.w < b.w;
}

void Kruskal(int N,int M)
{
    sort(Edges,Edges+M,cmp);
    int Count = 0, Max = 0;
    for(int i = 0; i < M; ++i)
    {
        int u = find(Edges[i].from);
        int v = find(Edges[i].to);
        if(u != v)
        {
            father[v] = u;
            Count++;
            if(Max < Edges[i].w)
                Max = Edges[i].w;
            if(Count == N-1)
                break;
        }
    }
    cout << Max << endl;
}
int main()
{
    int N,M;
    while(~scanf("%d%d",&N,&M))
    {
        for(int i = 1; i <= N; ++i)
            father[i] = i;
        for(int i = 0; i < M; ++i)
        {
            scanf("%d%d%d",&Edges[i].from, &Edges[i].to, &Edges[i].w);
        }
        Kruskal(N,M);
    }

    return 0;
}

 

 

WA代码:

#include<iostream>
#include<iomanip>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#define inf 9999999
using namespace std;
int N,M,a[2100][2100];
int C,F,P,poit[2100],look[2100],s=0;
int main()
{
    int i,j,k,x,y,z;
    while(cin>>N>>M)
    {memset(poit,9999999,sizeof(poit));
    memset(a,9999999,sizeof(a));
    memset(look,0,sizeof(look));
    for(i=1;i<=M;i++)
    {
        scanf("%d%d%d",&x,&y,&z);
        if(a[x][y]>z)
        {a[x][y]=z;
        a[y][x]=z;}
    }
    for(i=1;i<=N;i++)
        {
            poit[i]=a[1][i];

        }
        s=0;
    for(k=1;k<=N;k++)
    {int z=-1,x=99999999;
    for(i=1;i<=N;i++)
        if(look[i]==0&&poit[i]<x)
        {
            x=poit[i];
            z=i;
        }
        if(z==-1) break;
        look[z]=1;
        if(s<x) s=x;
    for(i=1;i<=N;i++)
        {
            if(a[z][i]<poit[i])
                {
                    poit[i]=a[z][i];
                }
        }
    }
    cout<<s<<endl;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值