程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ZOJ-3811 Untrusted Patrol DFS 2014牡丹江網絡賽C題

ZOJ-3811 Untrusted Patrol DFS 2014牡丹江網絡賽C題

編輯:C++入門知識

ZOJ-3811 Untrusted Patrol DFS 2014牡丹江網絡賽C題


n個點,m條雙向邊,k個傳感器。其中有l個傳感器記錄到了第一次到達的時間順序,求是否有可能檢查了所有的頂點。

首先判斷l,l

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int maxn=110000;
int head[maxn];
int visit[maxn];
int pile[maxn];
int n,m,k,l;
int num;
int s;
struct Edge
{
	int u,v;
	int next;
}edge[maxn*4];
void addedge(int u,int v)
{
	edge[num].u=u;
	edge[num].v=v;
	edge[num].next=head[u];
	head[u]=num++;
	edge[num].u=v;
	edge[num].v=u;
	edge[num].next=head[v];
	head[v]=num++;
}
void dfs(int u)
{
	visit[u]=1;
	for(int i=head[u];i!=-1;i=edge[i].next)
	{
		int v=edge[i].v;
		if(visit[v])
		{
			continue;
		}
		if(pile[v])
		{
			visit[v]=1;
			continue;
		}
		dfs(v);
	}
}
void dfs1(int u)
{
	visit[u]=1;
	s++;
	for(int i=head[u];i!=-1;i=edge[i].next)
	{
		int v=edge[i].v;
		if(!visit[v])
		{
			dfs1(v);
		}
	}
}
int main()
{
	int t;
	int flag;
	int u,v;
	scanf("%d",&t);
	while(t--)
	{
		flag=1;
		s=0;
		num=0;
		memset(head,-1,sizeof(head));
		memset(visit,0,sizeof(visit));
		memset(pile,0,sizeof(pile));
		scanf("%d%d%d",&n,&m,&k);
		for(int i=0;i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved