记录编号 204681 评测结果 AAAWTTTTTT
题目名称 [SYOI 2015] Asm.Def的打击序列 最终得分 30
用户昵称 GravatarWAHT 是否通过 未通过
代码语言 C++ 运行时间 24.002 s
提交时间 2015-11-04 15:55:03 内存使用 0.66 MiB
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<cstdlib>
using namespace std;


int q[300],map[300][300],vis[300];
int n,m,c;
int ans,len,Ans;
int f[300];

void dijkstra()
{
	int num=0;
	//for(int i=1;i<=len;i++) cout<<q[i]<<' ';
	for(int i=2;i<=len;i++)
	{	
		int tn=q[i-1],to=q[i];
		num+=min(map[tn][to],c);
	}
	num+=min(map[q[len]][q[1]],c);//cout<<num<<' '<<endl;
	ans=min(ans,num);
}
void lian(int s)
{
	memset(vis,0,sizeof(vis));
	int head=0,tail=1;
	vis[s]=1;
	q[1]=s;
	while(head++<tail)
	{
		int tn=q[head];
		for(int i=1;i<=n;i++)
			if(!vis[i]&&map[tn][i]<11000) vis[i]=1,q[++tail]=i,f[i]=1;
	}
	int tail2=1;
	head=0;
	while(head++<tail2)
	{
		int tn=q[head];
		for(int i=1;i<=n;i++)
			if(!vis[i]&&map[i][tn]<11000) vis[i]=1,q[++tail]=i,f[i]=1;
	}
	len=tail+tail2-1;
}
void dfs(int x)
{
	if(x==len+1)
	{
		dijkstra();
	}
	for(int i=1;i<=n;i++)
		if(vis[i])
		{	
			vis[i]=0,q[x]=i;
			dfs(x+1);
			vis[i]=1;
		}
}

void init()
{
	cin>>n>>m>>c;
	memset(map,10,sizeof(map));
	for(int i=1;i<=m;i++)
	{	
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		map[a][b]=min(map[a][b],c);
	}
	for(int i=1;i<=n;i++)
	{
		if(!f[i])
		{
			lian(i);
			ans=map[0][0];
			dfs(1);
			Ans+=ans;
		}
	}

}

int main()
{
	freopen("asm_lis.in","r",stdin);
	freopen("asm_lis.out","w",stdout);
	init();
	cout<<Ans<<endl;
	return 0;
}