学长推荐的这个题,他预言这题可以改变俺的人生观,世界观。。。
就是有几个需要注意色温地方 1 n<=10000所以用链表 2 员工标记是从 n~n-1所以 link[MAX] vs[MAX]都是错的 应是link[MAX*2] vs[MAX*2]
3 edge[MAX]数组明显开小了 edge[MAX*MAX]系统是可以接受的 (MAX=10005)
代码:
#include#include #include #include #define MAX 10005using namespace std;int head[MAX],link[MAX*2];bool vs[MAX*2];int n,s_edge;struct Edge{ int to,nxt;}edge[MAX*MAX];void addedge(int u,int v){ s_edge++; edge[s_edge].to=v; edge[s_edge].nxt=head[u];//又是这里 =s_edge head[u]=s_edge;}bool dfs(int x){ for(int e=head[x];e!=0;e=edge[e].nxt) { int v=edge[e].to; if(!vs[v]) { vs[v]=1; if(link[v]==-1||dfs(link[v])) { link[v]=x; return 1; } } } return 0;}int main(){ int i,u,v,num; char ch1,sh2,ch3; while(~scanf("%d",&n)) { s_edge=0; memset(head,0,sizeof(head)); for(i=0;i