紧急!!求救!!

紧急求救!!
在线等!!
哪位大神能帮忙看一下。
不知道为什么RE了。
下面的部分都注释掉了。
```c++
#include <cstdio>
#include <cctype>
#include <cmath>
#include <climits>
#include <algorithm>
#include <vector>
using namespace std;

#define rep(i,a,b) for (int i=(a);i<=(b);i++)
#define per(i,a,b) for (int i=(a);i>=(b);i--)

const int N=16384;
const int M=65536;
const int U=16;
const int MAX=INT_MAX>>1;

int rd(void);

int n,m;
struct Ed {
int u,v,d;
Ed(int _u=0,int _v=0,int _d=0) {
u=_u,v=_v,d=_d;
}
friend int operator < (Ed a,Ed b) {
return a.d>b.d;
}
}ed[M];

int f[N];
struct G {
int v,d;
G(int _v=0,int _d=0) {
v=_v,d=_d;
}
};
vector<G> g[N];

int dep[N];
int c;
int pre[U][N];
int minVal[U][N];

int q;

int Find(int x) {
if (f[x]==x)
return x;
f[x]=Find(f[x]);
return f[x];
}

void DFS(int x,int fa) {
rep(i,1,g[x].size()) {
int nx=g[x][i-1].v,d=g[x][i-1].d;
if (nx!=fa) {
dep[nx]=dep[x]+1;
pre[0][nx]=x;
minVal[0][nx]=d;
DFS(nx,x);
}
}
}

int LCA(int x,int y) {
if (dep[x]<dep[y])
swap(x,y);
per(i,c,0)
if (dep[x]-(1<<i)>=dep[y])
x=pre[i][x];
if (x==y) return x;
per(i,c,0)
if (pre[i][x]!=pre[i][y])
x=pre[i][x],y=pre[i][y];
return pre[0][x];
}

int Query(int x,int y) {
int fx=Find(x);
int fy=Find(y);
if (fx!=fy)
return -1;

int anc=LCA(x,y);
int ans=MAX;

int tx=x;
per(i,c,0)
if ((dep[x]-dep[anc])>>i&1) {
ans=min(ans,minVal[i][tx]);
tx=pre[i][tx];
}

int ty=y;
per(i,c,0)
if ((dep[y]-dep[anc])>>i&1) {
ans=min(ans,minVal[i][ty]);
ty=pre[i][ty];
}

return ans;
}

int main(void) {
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif

n=rd(),m=rd();
rep(i,1,m) {
int u=rd(),v=rd(),d=rd();
ed[i]=Ed(u,v,d);
}

/*
rep(i,1,n)
f[i]=i;
sort(ed+1,ed+m+1);
rep(i,1,m) {
int u=ed[i].u,v=ed[i].v,d=ed[i].d;
int fu=Find(u),fv=Find(v);
if (fu!=fv) {
f[fu]=fv;
g[u].push_back(G(v,d));
g[v].push_back(G(u,d));
}
}

c=(int)(log(n)/log(2));
rep(i,1,n)
if (!dep[i]) {
dep[i]=1;
pre[0][i]=i,minVal[0][i]=MAX;
DFS(i,-1);
}
rep(i,1,c) rep(j,1,n) {
pre[i][j]=pre[i-1][pre[i-1][j]];
minVal[i][j]=min(minVal[i-1][j],minVal[i-1][pre[i-1][j]]);
}

q=rd();
rep(i,1,q) {
int u=rd(),v=rd();
int ans=Query(u,v);
printf("%d\n",ans);
}
*/
return 0;
}

int rd(void) {
/*
int x=0,f=1; char c=getchar();
while (!isdigit(c)) {
if (c=='-') f=-1;
c=getchar();
}
while (isdigit(c)) {
x=x*10+c-'0';
c=getchar();
}
return x*f;
*/
int x;
scanf("%d",&x);
return x;
}
```

3 条评论

  • @ 2017-01-27 16:08:26

    这锅我不接>_<

  • @ 2017-01-26 22:45:20

    Vijos并没有打开-DONLINE_JUDGE这个编译开关啊
    是时候打开了@twd2

  • @ 2017-01-26 22:15:01

    嗯这是VIJOS的锅。
    在其他网站上都过了。

  • 1

信息

ID
1843
难度
7
分类
(无)
标签
递交数
5319
已通过
954
通过率
18%
被复制
10
上传者