题目:通讯
有向图不要跑最小生成树
因为有向图不一定连通,无向图不用考虑连通问题
kuskal求出来的解不一定联通,如下图
而prim求出来会不是最优解
那么有向图生成树叫什么呢?
树形图
最小树形图用什么求?
朱刘算法
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.z 0));} 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 我让它belong为0 输入边输入我设的n这……, 调了很长时间,关键是我手膜几组数据都对了,然后……我调了两个小时 同样是这个题 n应改为num,应该是在缩点之后的点中跑lca而不该置为n 话说缩点后点变多了 然后我就一直90分,调了40分钟 稍tm傻逼的错误改了四个小时 ins我tm写的x。 让各种大佬看没看出来。 然后被迫要数据 依然没调出来 然后我最后无意间看见自己写的ins「x」 式子推出来了,然后 g这里我写的* 莫队第一次写就写错了 CDQ 最近低错少了,然而陀螺王我数组开小调了两个小时 然而谁能想到一个200000个点稠密图要开多少,大力开吧 2000000不够 4000000AC题目:约会
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;
}
题目压力
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);
}
for(ll j=1;j<=t;j++)
for(ll i=1;i<=n;i++)
f[i][j]=f[f[i][j-1]][j-1];
题目 通讯
if(low[x]==dfn[x]){
ll yy=0;
cnt++;
while(1){
yy=sta[top--];
belong[yy]=cnt;
ins[x]=0;
if(yy==x) break;
}
}
题目 杀戮尖塔
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;
题目 小z的袜子
题目,略 CDQ一个比较函数六个错!!
达到巅峰!!!!!!!!!!!!!!!!!!!!!!!!!!!
我一定是睡觉时打的代码
题目,formula 1
我会说我hash表,模数取1100000还每次都清空,一直TLE
题目,陀螺王