低错备忘&&反思自我

 

题目:通讯

有向图不要跑最小生成树

因为有向图不一定连通,无向图不用考虑连通问题

kuskal求出来的解不一定联通,如下图

而prim求出来会不是最优解

低错备忘&&反思自我_第1张图片

 

 

那么有向图生成树叫什么呢?

树形图

最小树形图用什么求?

朱刘算法

https://www.cnblogs.com/xzxl/p/7243466.html

https://www.cnblogs.com/hdu-zsk/p/8167687.html

【概述】

为了求一个图的最小树形图,①先求出最短弧集合E0;②如果E0不存在,则图的最小树形图也不存在;③如果E0存在且不具有环,则E0就是最小树形图;④如果E0存在但是存在有向环,则把这个环收缩成一个点u,形成新的图G1,然后对G1继续求其的最小树形图,直到求到图Gi,如果Gi不具有最小树形图,那么此图不存在最小树形图,如果Gi存在最小树形图,那么逐层展开,就得到了原图的最小树形图。

题目:tree

一直re35 调试出输入错误,以为是快读错了,改成cin仍然错误,最后发现是比较函数出错。????

我怎么调出来比较函数的??为什么我这么写不对

bool pan (const edge &a,const edge &b)
{return a.z0));}

为什么这么写就对了??

bool pan (const edge &a,const edge &b)
{return a.z0&&b.flag!=0));}

 

#include
#define ll long long
#define A 10000000
using namespace std;
struct edge{
    ll x,y,z,id;
    ll flag;
}e[A];
ll n,m,need,fa[A],zong,ans,end[A];
inline ll read()
{
    ll f=1,x=0;char c=getchar();
    while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}
    while(isdigit(c)){x=x*10+c-'0';c=getchar();}
    return f*x;
}
ll find(ll x)
{
    if(fa[x]!=x) fa[x]=find(fa[x]);
    return fa[x];
}
void hebing(ll x,ll y)
{
    x=find(x),y=find(y);    if(x!=y) fa[y]=x;
}
bool pan (const edge &a,const edge &b)
{return a.z0));}
inline void kuskar(ll mid)
{
    for(ll i=0;i<=n;i++)
        fa[i]=i;
    zong=0,ans=0;
    for(ll i=1;i<=m;i++)
    if(!e[i].flag)
        e[i].z+=mid;
    sort(e+1,e+m+1,pan);
    for(ll i=1;i<=m;i++)
    {
        if(find(e[i].x)!=find(e[i].y))
        {
            if(!e[i].flag)
                zong++;
            hebing(e[i].x,e[i].y);
            ans+=e[i].z;
        }
    }
    for(ll i=1;i<=m;i++)
        if(!e[i].flag)
            e[i].z-=mid;
    ans-=need*mid;
}
int main()
{
    n=read(),m=read(),need=read();
    for(ll i=1;i<=m;i++)
        cin>>e[i].x>>e[i].y>>e[i].z>>e[i].flag/*,printf("flag=%d\n",e[i].flag)*/;
    ll l=-100,r=100;
    while(l<=r)
    {
        ll mid=(l+r)>>1;
        kuskar(mid);
        if(zong>need) l=mid+1;
        else r=mid-1;
    }
    cout<endl;
}
出错代码

题目:tree

    while(l<=r)
    {
        ll mid=(l+r)>>1;
        kuskar(mid);
        if(zong>=need) l=mid+1;
        else r=mid-1;
    }
    cout< 
 

kuskar里

inline void kuskar(ll mid)
{
         ……………………   
    ans-=need*mid;
}

 

就一直不对

让r

题目:约会

    if(dfn[x]==low[x])
    {
        ++cnt;
        ll yy=0,cis=0,lu;
        while(1)
        {
            yy=sta[top--];
            if(cis=0)lu=yy;
            ins[yy]=0;
            cis++;
            if(yy==x)
                break;
            scc[cnt].push_back(yy);
            belong[yy]=0;
        }
        if(cis>1) scc[cnt].push_back(cis),belong[cis]=yy;
    }

我让它belong为0

题目压力

    scanf("%lld%lld%lld",&n,&m,&q);
    t=log(n)/log(2)+2;
    for(ll i=1;i<=n;i++){
        ll x,y;
        scanf("%lld%lld",&x,&y);
        add(x,y);add(y,x);
    }

输入边输入我设的n这……,

调了很长时间,关键是我手膜几组数据都对了,然后……我调了两个小时

同样是这个题

    for(ll j=1;j<=t;j++)
        for(ll i=1;i<=n;i++)
            f[i][j]=f[f[i][j-1]][j-1];

n应改为num,应该是在缩点之后的点中跑lca而不该置为n

话说缩点后点变多了

然后我就一直90分,调了40分钟

题目 通讯

稍tm傻逼的错误改了四个小时

低错备忘&&反思自我_第2张图片

    if(low[x]==dfn[x]){
        ll yy=0;
        cnt++;
        while(1){
            yy=sta[top--];
            belong[yy]=cnt;
            ins[x]=0;
            if(yy==x)    break;
        }
    }

ins我tm写的x。

让各种大佬看没看出来。

然后被迫要数据

依然没调出来

然后我最后无意间看见自己写的ins「x」

题目 杀戮尖塔

式子推出来了,然后

            sum1[j-1]=(sum1[j-1]+f[i-1][j-1])%mod;
            f[i][j]=wq[i]*sum1[j-1]%mod;
            sum2[j-1]=(sum2[j-1]+g[i-1][j-1])%mod;
            g[i][j]=C[i-1][j-1]*wg[i]%mod*(sum2[j-1])%mod;

g这里我写的*

题目 小z的袜子

莫队第一次写就写错了

题目,略 CDQ一个比较函数六个错!!

达到巅峰!!!!!!!!!!!!!!!!!!!!!!!!!!!

我一定是睡觉时打的代码

低错备忘&&反思自我_第3张图片

CDQ

题目,formula 1

我会说我hash表,模数取1100000还每次都清空,一直TLE

题目,陀螺王

最近低错少了,然而陀螺王我数组开小调了两个小时

然而谁能想到一个200000个点稠密图要开多少,大力开吧

2000000不够 4000000AC

你可能感兴趣的:(低错备忘&&反思自我)