社区讨论
可读性超强 不信进来看 样例全能过
P1600[NOIP 2016 提高组] 天天爱跑步参与者 8已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @mi6hoyoz
- 此快照首次捕获于
- 2025/11/20 05:03 4 个月前
- 此快照最后确认于
- 2025/11/20 05:03 4 个月前
但是一个点没过 谁能告诉下原因
CPP#include<iostream>
#include<cstring>
#include<ctime>
using namespace std;
const int maxn=100;
int f[maxn][maxn][maxn];
int w[maxn];
int map[maxn][maxn];
int b[maxn];//父亲节点
int n,m;//节点 玩家
int pep=0;
int tj[maxn];
void ff(int d)
{
int time=-1;
int a[maxn];
int aa=1;
a[1]=d;
while(b[d])
{
aa++;
d=b[d];
a[aa]=d; // cout<<aa<<" ";
}
for(int i=aa;i>=1;i--)
{
time++; // cout<<time<<" ";
f[pep][time][ a[i] ]=1; // cout<<pep<<" "<<time<<" "<<a[i]<<endl;
if(w[ a[i] ] == time)
tj[ a[i] ]++;
}
}
void bfs(int begin ,int end)
{
if(begin == end) {b[begin]=0; ff(begin); return ;}
int q[maxn],head=0,tail=1;
int vis[maxn];
memset(vis,0,sizeof(vis));
q[1]=begin;b[begin]=0;vis[begin]=1;
do
{
head++;
for(int i=1;i<=n;i++)
if(map[ q[head] ][i]==1 && vis[i]==0)
{
tail++;
q[tail]=i;
b[i]=q[head];
vis[i]=1;
if(i==end)
{
head=tail;
ff(i);
break;
}
}
}
while(head<tail);
}
int main()
{
cin>>n>>m;
//读图
int jing=n-1;
while(jing--)
{
int u,v;
cin>>u>>v;
map[u][v]=map[v][u]=1;
}
//读观察员
for(int i=1;i<=n;i++)
{cin>>w[i]; } // cout<<w[i]<<" "; }
//读玩家存最短路径
memset(f,0,sizeof(f));
while(m--)
{
int begin,end;
cin>>begin>>end;
pep++;
bfs(begin,end);
}
//输出
for(int i=1;i<=n-1;i++)
cout<<tj[i]<<" "; cout<<tj[n]<<endl;
//cout<<(double)clock()/CLOCKS_PER_SEC;
return 0;
}
回复
共 9 条回复,欢迎继续交流。
正在加载回复...