样例很淫荡............太弱了》。。。。。。。。
//2625493 2011-08-13 14:57:10 Accepted 1333 C++ 0 180 ylwh@Unknown
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define N 27
#define MAX 20000000
int main(void)
{
int n, map[N][N], d[N], Q[N], staue[N];
double c[N], maxs, flag;
char ch;
int i, j, k, head, tail, now, temp;
while(scanf("%d", &n) != EOF)
{
memset(map, 0, sizeof(map));
memset(c, 0, sizeof(c));
for(i=1; i<=n; i++)
{
scanf(" %c%lf", &ch, &flag);
temp = ch -'A' + 1;
c[temp] = flag;
while(scanf("%c", &ch) && ch!='\n')
{
if(ch >= 'A' && ch <= 'Z')
map[ch-'A'+1][temp] = 1;
else if(ch == '*')
map[0][temp] = 1;
}
}
for(i=1; i<=26; i++)
d[i] = MAX;
memset(staue, 0, sizeof(staue));
head = 0;
tail = 1;
Q[head] = 0;
d[0] = 0;
staue[0] = 1;
while(head != tail)
{
now = Q[head];
for(i=1; i<=26; i++)
{
if( map[now][i] && d[i] > d[now] + 1)
{
d[i] = d[now] + 1;
if( !staue[i])
{
staue[i] = 1;
Q[tail++] = i;
tail %= 27;
}
}
}
staue[now] = 0;
head++;
head %= 27;
}
maxs = 0.0;
int ans =0;
for(i=1; i<=26; i++)
{
c[i] *= 1.0 * pow(0.95, (double)d[i]);//淫荡的题啊,刚开始这里直接写的c[i] *= d[i]啊,我日。。样例还能过, = = !你妹的,样例尼玛的也太弱了吧
if(c[i] > maxs)
{
ans = i;
maxs = c[i];
}
}
printf("Import from %c\n", ans+'A'-1);
}
return 0;
}