自己在本地可以编译,在我们学校的oj上不能,这是为什么
#include<bits/stdc++.h>
using namespace std;
int cnt=0,head[10005],n,m,k,ans=10000000,g[10005][10005];
int is_del[10005][10005];
struct edge
{
int v,w,next;
}e[10005];
void addedge(int u,int v,int w)
{
e[++cnt].v=v;
e[cnt].w=w;
e[cnt].next=head[u];
head[u]=cnt;
}
struct node
{
int u,d;
operator<(const node& a) const{
return d>a.d;
}
};
int dijskral()
{
int dis[1005],vis[1005];
memset(vis,0,sizeof(vis));
for(int i = 1;i<=n;i++) dis[i]=0x3f3f3f3f;
dis[1]=0;
priority_queue<node> q;
q.push((node){1,0});
while(!q.empty())
{
node f=q.top(); q.pop();
int u=f.u,d=f.d;
if(vis[u]==1) continue;
vis[u]=1;
for(int i = head[u];i;i=e[i].next){
int y=e[i].v;
if(dis[y]>dis[u]+e[i].w){
dis[y]=dis[u]+e[i].w;
if(vis[y]==0)
{
q.push((node){y,dis[y]});
}
}
}
}
return dis[n];
}
void dfs(int x)
{
if(x==k)
{
int tmp=dijskral();
ans=min(ans,tmp);
return;
}
for(int h = 1;h<=n;h++)
{
for(int i = head[h];i;i=e[i].next)
{
int v=e[i].v;
if(is_del[h][v]==0)
{
is_del[h][v]=1;
e[i].w=0;
for(int j = head[v];j;j=e[j].next){
if(e[j].v==h)
{
e[j].w=0;
break;
}
}
dfs(x+1);
e[i].w=g[h][v];
for(int j = head[v];j;j=e[j].next)
{
if(e[j].v==h)
{
e[j].w=g[v][h];
break;
}
}
}
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i = 1;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
addedge(a,b,c);
addedge(b,a,c);
g[a][b]=g[b][a]=c;
}
dfs(0);
cout<<ans;
return 0;
}
