【ZJOI2004】嗅探器
作者:互联网
一道鬼畜的题目,洛谷给的标签是紫题,怎么可能是紫题……
原本我想找出在起点到终点的路径上的割点,但是看到了这良心的数据之后……
由于数据很小,所以我们枚举中间点,然后进行一遍dfs,判断不经过这个中间点这张图是否联通即可。
这就能过??
是的……时间复杂度为O(n2)
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 int n; 7 struct node { 8 int next,to; 9 }a[100010]; 10 int num,head[100010]; 11 bool vis[1010]; 12 int x,y; 13 inline void add(int from,int to) { 14 a[++num].next=head[from]; 15 a[num].to=to; 16 head[from]=num; 17 } 18 bool dfs(int u,int pd) { 19 for(int i=head[u];i;i=a[i].next) { 20 int v=a[i].to; 21 if(vis[v]) continue ; 22 if(v==pd) continue ; 23 if(v==x) continue ; 24 if(v==y) return 1; 25 vis[v]=1; 26 if(dfs(v,pd)) return 1; 27 } 28 return 0; 29 } 30 int main() { 31 scanf("%d",&n); 32 while(scanf("%d%d",&x,&y)==2&&x&&y) { 33 add(x,y); 34 add(y,x); 35 } 36 scanf("%d%d",&x,&y); 37 for(int i=1;i<=n;i++) { 38 if(i==x||i==y) continue ; 39 memset(vis,0,sizeof(vis)); 40 if(!dfs(x,i)) { 41 printf("%d\n",i); 42 return 0; 43 } 44 } 45 puts("No solution"); 46 return 0; 47 }AC Code
标签:head,return,int,嗅探器,add,num,ZJOI2004,include 来源: https://www.cnblogs.com/shl-blog/p/10807695.html