比赛 |
“Asm.Def战记之拉格朗日点”杯 |
评测结果 |
RRRRRRRRRR |
题目名称 |
Asm.Def的打击序列 |
最终得分 |
0 |
用户昵称 |
FETS 1/3 |
运行时间 |
0.012 s |
代码语言 |
C++ |
内存使用 |
0.91 MiB |
提交时间 |
2015-11-04 10:49:41 |
显示代码纯文本
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=250;
const int maxm=30055;
int n,m,c;
struct edge
{
int x;
int y;
int v;
int next;
};
edge e[maxm];
int qdb[maxn];
int t=0;
inline void insert(int u,int v,int va)
{
e[++t].x=u;
e[t].y=v;
e[t].v=va;
e[t].next=qdb[u];
qdb[u]=t;
}
int f[maxn][maxn];
int q[maxn*2];
int head=1;
int tail=0;
int ans=0;
int vis[maxn]={};
void bfs(int st)
{
q[++tail]=st;
vis[st]=1;
ans+=c;
for(;head<=tail;head++)
{
int minv=99999999;
int minid=0;
for(int i=qdb[q[head]];i;i=e[i].next)
{
if(e[i].v>c)
{
ans+=c;
vis[e[i].y]=1;
continue;
}
if(e[i].v<minv)
{
minv=min(minv,e[i].v);
minid=i;
}
}
if(minid==0)
break;
if(!vis[e[minid].y])
{
vis[e[minid].y]=1;
q[++tail]=e[minid].y;
ans+=e[minid].v;
}
else if(e[minid].y==st)
{
ans-=c;
ans+=e[minid].v;
}
}
for(int i=1;i<=n;i++)
{
if(vis[i]==0)
bfs(i);
}
}
/*4 3 10
1 2 2
2 3 2
3 1 2*/
int main()
{
memset(f,1,sizeof(f));
scanf("%d %d %d",&n,&m,&c);
int te=c*n;
for(int i=1;i<=m;i++)
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(f[a][b]>c)
f[a][b]=c;
insert(a,b,c);
}
bfs(1);
if(ans>te)
{
cout<<te;
}
else
cout<<ans;
return 0;
}