Fukuoka 2011 F - City Merger <路径压缩,位运算,AC自动机>(二)

2014-11-24 10:35:00 · 作者: · 浏览: 1
or (i=0;i for (t=1;t<=n;t++)
{
k=1-k;
memset(dp[k],-1,sizeof(dp[k]));
for (i=0;i for (j=0;j for (p=0;p<=g;p++)
if (dp[1-k][j][p]!=-1)
{
x=point[need[i]].w|p;
if (dp[k][i][x]==-1 || dp[k][i][x]>dp[1-k][j][p]+arc[j][i])
dp[k][i][x]=dp[1-k][j][p]+arc[j][i];
}
}
ans=oo;
for (i=0;i if (dp[k][i][g]!=-1 && dp[k][i][g] return ans;
}
int main()
{
while (~scanf("%d",&n))
{
if (!n) break;
Built_Trie();
Built_AC_Automation();
Built_Arc();
printf("%d\n",EXE_DP());
}
return 0;
}