比赛 |
20220418高一小测验 |
评测结果 |
AAATTTTTTT |
题目名称 |
道路拆除(民间数据) |
最终得分 |
30 |
用户昵称 |
惠惠 |
运行时间 |
7.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2022-04-18 21:42:49 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int m,n;
int l1,t1,t2,l2;
int tot=INT_MAX,l=0;
struct City{
vector<int> d;
};
City c[35001];
int N[35001][2];
vector<int> way;
void qwe(int x,int time,int last,int lasttime)
{
if(time>lasttime||time>N[x][0]) return;
N[x][0]=time;
N[x][1]=time-l;
int a=0;
for(int i=0;i<c[x].d.size();++i)
{
bool flag=true;
for(int j=0;j<way.size()-1;++j)
if((way[j]==x&&way[j+1]==c[x].d[i])||
(way[j+1]==x&&way[j]==c[x].d[i]))
{
l++;
flag=false;
break;
}
qwe(c[x].d[i],time+1,last,lasttime);
if(flag==false)l--;
}
return;
}
void asd(int x,int time,int last,int lasttime)
{
if(time>lasttime) return;
if(x==last)
{
for(int i=1;i<=n;++i)
N[i][0]=INT_MAX;
l=0;
qwe(1,0,l2,t2);
tot=min(tot,N[l2][1]+time-l);
return;
}
for(int i=0;i<c[x].d.size();++i)
{
way.push_back(c[x].d[i]);
asd(c[x].d[i],time+1,last,lasttime);
way.pop_back();
}
return;
}
int main()
{
freopen("cspjx2019pj_dismantle.in","r",stdin);
freopen("cspjx2019pj_dismantle.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=m;++i)
{
int a,b;
cin>>a>>b;
c[a].d.push_back(b); c[b].d.push_back(a);
}
cin>>l1>>t1>>l2>>t2;
way.push_back(1);
asd(1,0,l1,t1);
if(N[l2][0]==INT_MAX) cout<<-1;
else cout<<m-tot;
return 0;
}