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