https://hihocoder.com/contest/hiho213/problem/1
被一道图论水题教育了一番。
题意:
给你n个a到b的单向路。问你起点和终点分别是什么。
POINT:
乍一看起点就是入度为0,终点出度为0。其实不然。
题目并没有保证不走重复的点。
所以起点应该是出度-入度=1的点,终点是入度-出度=1的点。
题目保证有解,所以起点不会在一个环里,不要纠结。
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <map>
#include <string>
using namespace std;
#define LL long long
const LL maxn = 222+55;
map<string,int> mp;
int chu[maxn];
int ru[maxn];
map<int,string> name;
int main()
{
int n,cnt=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
string a,b;
cin>>a>>b;
if(mp[a]==0) mp[a]=++cnt,name[cnt]=a;
if(mp[b]==0) mp[b]=++cnt,name[cnt]=b;
chu[mp[a]]++;ru[mp[b]]++;
}
for(int i=1;i<=cnt;i++){
if(chu[i]-ru[i]==1){
cout<<name[i]<<" ";
break;
}
}
for(int i=1;i<=cnt;i++){
if(ru[i]-chu[i]==1){
cout<<name[i]<<endl;
break;
}
}
}