记录编号 |
58201 |
评测结果 |
AAWAAAAAAW |
题目名称 |
百进制数 |
最终得分 |
80 |
用户昵称 |
feng |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.014 s |
提交时间 |
2013-04-18 11:31:49 |
内存使用 |
4.91 MiB |
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
struct node{
int nex;
}a[1001];
struct edge{
int nex,x,y,v;
}e[50001];
int dis[1001];
bool f[1001];
int w[1001];
bool g[1001];
int queue[1000001];
int n,p;
int oud[1001];
int ind[1001];
void add(int x,int y,int v){
p++;
e[p].v=v;
e[p].y=y;
e[p].nex=a[x].nex;
a[x].nex=p;
}
void init(){
freopen("hex.in","r",stdin);
freopen("hex.out","w",stdout);
scanf("%d\n",&n);
memset(g,false,sizeof(g));
string str;
for (int i=1;i<=n;i++){
getline(cin,str);
int lll=str.size();
int len=0;
for (int j=0;j<lll;j++)
if (str[j]<='9' && str[j]>='0') len++;
int x;
if (len%2==0)
x=(str[0]-'0')*10+str[1]-'0';
else x=str[0]-'0';
int y=str[len-1]-'0'+(str[len-2]-'0')*10;
if (x!=y)
add(x,y,len);
else{
// g[y]=true;
w[y]=len;
}
//oud[x]++;
//ind[y]++;
}
} /*
int spfa(int s){
memset(f,false,sizeof(f));
memset(dis,0,sizeof(dis));
f[s]=true;
//int o=dis[s];
dis[s]=0;
int head,tail;
queue[tail=1]=s;
head=0;
while (head<tail){
int x=queue[++head];
f[x]=false;
int t=a[x].nex;
while (t){
if (e[t].v+dis[x]>dis[e[t].y]){
dis[e[t].y]=e[t].v+dis[x];
if (!f[e[t].y]){
queue[++tail]=e[t].y;
f[e[t].y]=true;
}
}
t=e[t].nex;
}
}
int maxx=0;
for (int i=0;i<100;i++)
if (dis[i]>maxx) maxx=dis[i];
return maxx;
}*/
void dfs(int x){
f[x]=true;
int t=a[x].nex;
while (t){
ind[e[t].y]++;
if (!f[e[t].y]){
dfs(e[t].y);
}
t=e[t].nex;
}
}
int bfs(int s){
int head,tail;
memset(dis,0,sizeof(dis));
queue[tail=1]=s;
f[s]=true;
while (head<tail){
int x=queue[++head];
int t=a[x].nex;
while (t){
int y=e[t].y;
int v=e[t].v+dis[x];
if (v>dis[y]) dis[y]=v;
ind[y]--;
if (ind[y]==0 && !f[y]){
queue[++tail]=y;
f[y]=true;
}
t=e[t].nex;
}
}
int maxx=0;
for (int i=0;i<100;i++)
if (dis[i]>maxx) maxx=dis[i];
return maxx;
}
void work(){
int tmp;
int ans=0;
for (int i=0;i<100;i++){
if (i==2){
int o;
o=1;
}
memset(f,false,sizeof(f));
memset(ind,0,sizeof(ind));
dfs(i);
memset(f,false,sizeof(f));
tmp=bfs(i);
for (int j=0;j<100;j++)
if (f[j]) tmp+=w[j];
//tmp=spfa(i);
ans=ans<tmp?tmp:ans;
}
printf("%d",ans);
}
int main()
{
init();
work();
return 0;
}