1.比较函数玄学错误
题目:tree
一直re35 调试出输入错误,以为是快读错了,改成cin仍然错误,最后发现是比较函数出错。????
我怎么调出来比较函数的??为什么我这么写不对
bool pan (const edge &a,const edge &b) {return a.z<b.z||(a.z==b.z&&(a.flag==0));}为什么这么写就对了??
bool pan (const edge &a,const edge &b) {return a.z<b.z||(a.z==b.z&&(a.flag==0&&b.flag!=0));}#include<bits/stdc++.h> #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<b.z||(a.z==b.z&&(a.flag==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<<ans<<endl; } 出错代码
2.二分
题目:tree
while(l<=r) { ll mid=(l+r)>>1; kuskar(mid); if(zong>=need) l=mid+1; else r=mid-1; } cout<<ans<<endl;kuskar里
inline void kuskar(ll mid) { …………………… ans-=need*mid; }
就一直不对
让r<mid不符合条件的我也记录了如果终止时以r为结尾结束我就错了
3.belong
题目:约会
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
4.题目压力
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分钟
5.题目 通讯
稍tm傻逼的错误改了四个小时
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」
然后就没了
转载于:https://www.cnblogs.com/znsbc-13/p/11182202.html
